Merge pull request #5332 from cobbspur/route

Fix route for About page
This commit is contained in:
Hannah Wolfe 2015-05-25 18:37:45 +01:00
commit 4456f17c65
10 changed files with 94 additions and 66 deletions

View File

@ -1,5 +1,5 @@
import Ember from 'ember';
var SettingsAboutController = Ember.Controller.extend({
var AboutController = Ember.Controller.extend({
updateNotificationCount: 0,
actions: {
@ -9,4 +9,4 @@ var SettingsAboutController = Ember.Controller.extend({
}
});
export default SettingsAboutController;
export default AboutController;

View File

@ -20,6 +20,7 @@ Router.map(function () {
this.route('signout');
this.route('signup', {path: '/signup/:token'});
this.route('reset', {path: '/reset/:token'});
this.route('about', {path: '/about'});
this.resource('posts', {path: '/'}, function () {
this.route('post', {path: ':post_id'});
@ -37,6 +38,7 @@ Router.map(function () {
this.route('user', {path: '/:slug'});
});
// Redirect about page
this.route('about');
this.route('tags');
this.route('labs');

View File

@ -0,0 +1,35 @@
import AuthenticatedRoute from 'ghost/routes/authenticated';
import loadingIndicator from 'ghost/mixins/loading-indicator';
import styleBody from 'ghost/mixins/style-body';
var AboutRoute = AuthenticatedRoute.extend(styleBody, loadingIndicator, {
titleToken: 'About',
classNames: ['view-about'],
cachedConfig: false,
model: function () {
var cachedConfig = this.get('cachedConfig'),
self = this;
if (cachedConfig) {
return cachedConfig;
}
return ic.ajax.request(this.get('ghostPaths.url').api('configuration'))
.then(function (configurationResponse) {
var configKeyValues = configurationResponse.configuration;
cachedConfig = {};
configKeyValues.forEach(function (configKeyValue) {
cachedConfig[configKeyValue.key] = configKeyValue.value;
});
self.set('cachedConfig', cachedConfig);
return cachedConfig;
});
},
renderTemplate: function () {
this.render('about', {into: 'application'});
}
});
export default AboutRoute;

View File

@ -3,32 +3,8 @@ import loadingIndicator from 'ghost/mixins/loading-indicator';
import styleBody from 'ghost/mixins/style-body';
var SettingsAboutRoute = AuthenticatedRoute.extend(styleBody, loadingIndicator, {
titleToken: 'About',
classNames: ['settings-view-about'],
cachedConfig: false,
model: function () {
var cachedConfig = this.get('cachedConfig'),
self = this;
if (cachedConfig) {
return cachedConfig;
}
return ic.ajax.request(this.get('ghostPaths.url').api('configuration'))
.then(function (configurationResponse) {
var configKeyValues = configurationResponse.configuration;
cachedConfig = {};
configKeyValues.forEach(function (configKeyValue) {
cachedConfig[configKeyValue.key] = configKeyValue.value;
});
self.set('cachedConfig', cachedConfig);
return cachedConfig;
});
},
renderTemplate: function () {
this.render('settings/about', {into: 'application'});
beforeModel: function () {
this.transitionTo('about');
}
});

View File

@ -3,7 +3,7 @@
<header class="gh-about-header">
<img class="gh-logo" src="{{gh-path 'admin' '/img/ghost-logo.png'}}" alt="Ghost" />
<!-- TODO: fix about notifications -->
{{gh-notifications location="settings-about-upgrade" notify="updateNotificationChange"}}
{{gh-notifications location="about-upgrade" notify="updateNotificationChange"}}
</header>
<section class="gh-env-details">

View File

@ -0,0 +1,5 @@
import BaseView from 'ghost/views/settings/content-base';
var AboutView = BaseView.extend();
export default AboutView;

View File

@ -1,5 +0,0 @@
import BaseView from 'ghost/views/settings/content-base';
var SettingsAboutView = BaseView.extend();
export default SettingsAboutView;

View File

@ -75,6 +75,11 @@ screens = {
linkSelector: '.gh-nav-main-editor',
selector: '.gh-nav-main-editor.active'
},
about: {
url: 'ghost/settings/about',
linkSelector: '.gh-nav-menu-about',
selector: '.gh-about-header'
},
'editor.editing': {
url: 'ghost/editor/',
linkSelector: 'a.post-edit',

View File

@ -0,0 +1,38 @@
// # About Test
// Test the various parts of the About page
/*globals CasperTest, casper */
CasperTest.begin('About screen is correct', 9, function suite(test) {
casper.thenOpenAndWaitForPageLoad('about', function testTitleAndUrl() {
test.assertTitle('About - Test Blog', 'Ghost admin has incorrect title');
test.assertUrlMatch(/ghost\/about\/$/, 'Redirected to the correct URL');
});
casper.then(function testVersionNumber() {
var versionNumber = casper.getHTML('.gh-env-list-version');
test.assertMatch(versionNumber, /\d+\.\d+\.\d+/, 'Version is a number'); // Tests for a pattern like 0.0.0 to v11111.3334534.2342453-beta
});
casper.then(function testDatabaseType() {
var databaseTypeText = casper.getHTML('.gh-env-list-database-type');
test.assertMatch(databaseTypeText, /sqlite3|mysql|pg/gi, 'Database is an allowed type');
});
casper.waitForSelector('.gh-contributors article', function testContributors() {
var firstContribImageSrc = casper.getElementAttribute('.gh-contributors article:nth-child(1) a img', 'src');
// Check first contributor image tag is on the page
test.assertExist('.gh-contributors article:nth-child(1) img', 'First contributor image is in place');
// Check first contributor image resource exists & alt tag isnt empty
test.assertResourceExists(firstContribImageSrc, 'First contributor image file exists');
test.assertDoesntExist('.gh-contributors article:nth-child(1) a img[alt=""]', 'First contributor image alt is not empty');
// Check first contributor links to GitHub
test.assertExists('.gh-contributors article:nth-child(1) a[href*="github.com"]', 'First contributor link to GitHub');
// Check first contributor links to GitHub
test.assertDoesntExist('.gh-contributors article:nth-child(1) a[title=""]', 'First contributor title is not empty');
});
});

View File

@ -1,38 +1,10 @@
// # About Test
// Test the various parts of the About page
// # Settings About Test
// Tests that the settings about page is redirected
/*globals CasperTest, casper */
CasperTest.begin('About screen is correct', 9, function suite(test) {
CasperTest.begin('About screen is correct', 1, function suite(test) {
casper.thenOpenAndWaitForPageLoad('settings.about', function testTitleAndUrl() {
test.assertTitle('Settings - About - Test Blog', 'Ghost admin has incorrect title');
test.assertUrlMatch(/ghost\/settings\/about\/$/, 'Landed on the correct URL');
});
casper.then(function testVersionNumber() {
var versionNumber = casper.getHTML('.gh-env-list-version');
test.assertMatch(versionNumber, /\d+\.\d+\.\d+/, 'Version is a number'); // Tests for a pattern like 0.0.0 to v11111.3334534.2342453-beta
});
casper.then(function testDatabaseType() {
var databaseTypeText = casper.getHTML('.gh-env-list-database-type');
test.assertMatch(databaseTypeText, /sqlite3|mysql|pg/gi, 'Database is an allowed type');
});
casper.waitForSelector('.gh-contributors article', function testContributors() {
var firstContribImageSrc = casper.getElementAttribute('.gh-contributors article:nth-child(1) a img', 'src');
// Check first contributor image tag is on the page
test.assertExist('.gh-contributors article:nth-child(1) img', 'First contributor image is in place');
// Check first contributor image resource exists & alt tag isnt empty
test.assertResourceExists(firstContribImageSrc, 'First contributor image file exists');
test.assertDoesntExist('.gh-contributors article:nth-child(1) a img[alt=""]', 'First contributor image alt is not empty');
// Check first contributor links to GitHub
test.assertExists('.gh-contributors article:nth-child(1) a[href*="github.com"]', 'First contributor link to GitHub');
// Check first contributor links to GitHub
test.assertDoesntExist('.gh-contributors article:nth-child(1) a[title=""]', 'First contributor title is not empty');
test.assertUrlMatch(/ghost\/about\/$/, 'Redirected to the correct URL');
});
});