mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-11-22 19:32:54 +03:00
commit
4456f17c65
@ -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;
|
@ -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');
|
||||
|
35
core/client/app/routes/about.js
Normal file
35
core/client/app/routes/about.js
Normal 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;
|
@ -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');
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -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">
|
5
core/client/app/views/about.js
Normal file
5
core/client/app/views/about.js
Normal file
@ -0,0 +1,5 @@
|
||||
import BaseView from 'ghost/views/settings/content-base';
|
||||
|
||||
var AboutView = BaseView.extend();
|
||||
|
||||
export default AboutView;
|
@ -1,5 +0,0 @@
|
||||
import BaseView from 'ghost/views/settings/content-base';
|
||||
|
||||
var SettingsAboutView = BaseView.extend();
|
||||
|
||||
export default SettingsAboutView;
|
@ -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',
|
||||
|
38
core/test/functional/client/about_test.js
Normal file
38
core/test/functional/client/about_test.js
Normal 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');
|
||||
});
|
||||
});
|
@ -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');
|
||||
});
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user