mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-24 23:48:13 -05:00
Added empty member management routes
This commit is contained in:
parent
33450a4ee1
commit
bea2d8c871
9 changed files with 120 additions and 4 deletions
|
@ -64,6 +64,10 @@ Router.map(function () {
|
||||||
this.route('settings.integrations.unsplash', {path: '/settings/integrations/unsplash'});
|
this.route('settings.integrations.unsplash', {path: '/settings/integrations/unsplash'});
|
||||||
this.route('settings.integrations.zapier', {path: '/settings/integrations/zapier'});
|
this.route('settings.integrations.zapier', {path: '/settings/integrations/zapier'});
|
||||||
|
|
||||||
|
this.route('members', function () {
|
||||||
|
this.route('details', {path: ':member_id'});
|
||||||
|
});
|
||||||
|
|
||||||
this.route('subscribers', function () {
|
this.route('subscribers', function () {
|
||||||
this.route('new');
|
this.route('new');
|
||||||
this.route('import');
|
this.route('import');
|
||||||
|
|
26
ghost/admin/app/routes/members.js
Normal file
26
ghost/admin/app/routes/members.js
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
import AuthenticatedRoute from 'ghost-admin/routes/authenticated';
|
||||||
|
import {inject as service} from '@ember/service';
|
||||||
|
|
||||||
|
export default AuthenticatedRoute.extend({
|
||||||
|
config: service(),
|
||||||
|
|
||||||
|
titleToken: 'Members',
|
||||||
|
|
||||||
|
// redirect to posts screen if:
|
||||||
|
// - developer experiments aren't enabled
|
||||||
|
// - TODO: members is disabled?
|
||||||
|
// - logged in user isn't owner/admin
|
||||||
|
beforeModel() {
|
||||||
|
this._super(...arguments);
|
||||||
|
|
||||||
|
if (!this.config.get('enableDeveloperExperiments')) {
|
||||||
|
return this.transitionTo('posts');
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.session.user.then((user) => {
|
||||||
|
if (!user.isOwnerOrAdmin) {
|
||||||
|
return this.transitionTo('posts');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
3
ghost/admin/app/routes/members/details.js
Normal file
3
ghost/admin/app/routes/members/details.js
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
import AuthenticatedRoute from 'ghost-admin/routes/authenticated';
|
||||||
|
|
||||||
|
export default AuthenticatedRoute.extend({});
|
3
ghost/admin/app/routes/members/index.js
Normal file
3
ghost/admin/app/routes/members/index.js
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
import AuthenticatedRoute from 'ghost-admin/routes/authenticated';
|
||||||
|
|
||||||
|
export default AuthenticatedRoute.extend({});
|
|
@ -50,10 +50,11 @@
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</li>
|
</li>
|
||||||
<li>{{#link-to "team" data-test-nav="team"}}{{svg-jar "account-group"}}Team{{/link-to}}</li>
|
<li>{{#link-to "team" data-test-nav="team"}}{{svg-jar "account-group"}}Team{{/link-to}}</li>
|
||||||
{{#if feature.subscribers}}
|
{{#if (and config.enableDeveloperExperiments (gh-user-can-admin session.user))}}
|
||||||
{{#if (gh-user-can-admin session.user)}}
|
<li>{{#link-to "members" data-test-nav="members"}}{{svg-jar "email"}}Members{{/link-to}}</li>
|
||||||
<li>{{#link-to "subscribers" data-test-nav="subscribers"}}{{svg-jar "email"}}Subscribers{{/link-to}}</li>
|
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
{{#if (and feature.subscribers (gh-user-can-admin session.user))}}
|
||||||
|
<li>{{#link-to "subscribers" data-test-nav="subscribers"}}{{svg-jar "email"}}Subscribers{{/link-to}}</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</ul>
|
</ul>
|
||||||
{{#if (gh-user-can-admin session.user)}}
|
{{#if (gh-user-can-admin session.user)}}
|
||||||
|
|
1
ghost/admin/app/templates/members.hbs
Normal file
1
ghost/admin/app/templates/members.hbs
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{{outlet}}
|
0
ghost/admin/app/templates/members/details.hbs
Normal file
0
ghost/admin/app/templates/members/details.hbs
Normal file
10
ghost/admin/app/templates/members/index.hbs
Normal file
10
ghost/admin/app/templates/members/index.hbs
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
<section class="gh-canvas">
|
||||||
|
<header class="gh-canvas-header">
|
||||||
|
<h2 class="gh-canvas-title" data-test-screen-title>Members</h2>
|
||||||
|
<div class="view-actions"></div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<section class="view-container">
|
||||||
|
<p>...</p>
|
||||||
|
</section>
|
||||||
|
</section>
|
68
ghost/admin/tests/acceptance/members-test.js
Normal file
68
ghost/admin/tests/acceptance/members-test.js
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||||
|
import {authenticateSession, invalidateSession} from 'ember-simple-auth/test-support';
|
||||||
|
import {beforeEach, describe, it} from 'mocha';
|
||||||
|
import {click, currentRouteName, currentURL, find} from '@ember/test-helpers';
|
||||||
|
import {expect} from 'chai';
|
||||||
|
import {setupApplicationTest} from 'ember-mocha';
|
||||||
|
import {visit} from '../helpers/visit';
|
||||||
|
|
||||||
|
describe('Acceptance: Members', function () {
|
||||||
|
let hooks = setupApplicationTest();
|
||||||
|
setupMirage(hooks);
|
||||||
|
|
||||||
|
it('redirects to signin when not authenticated', async function () {
|
||||||
|
await invalidateSession();
|
||||||
|
await visit('/members');
|
||||||
|
|
||||||
|
expect(currentURL()).to.equal('/signin');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('redirects non-admins to posts', async function () {
|
||||||
|
let role = this.server.create('role', {name: 'Editor'});
|
||||||
|
this.server.create('user', {roles: [role]});
|
||||||
|
|
||||||
|
await authenticateSession();
|
||||||
|
await visit('/members');
|
||||||
|
|
||||||
|
expect(currentURL()).to.equal('/');
|
||||||
|
expect(find('[data-test-nav="members"]'), 'sidebar link')
|
||||||
|
.to.not.exist;
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('as admin', function () {
|
||||||
|
beforeEach(async function () {
|
||||||
|
this.server.loadFixtures('configurations');
|
||||||
|
let config = this.server.schema.configurations.first();
|
||||||
|
config.update({enableDeveloperExperiments: true});
|
||||||
|
|
||||||
|
let role = this.server.create('role', {name: 'Administrator'});
|
||||||
|
this.server.create('user', {roles: [role]});
|
||||||
|
|
||||||
|
return await authenticateSession();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('redirects to posts if developer experiments is disabled', async function () {
|
||||||
|
let config = this.server.schema.configurations.first();
|
||||||
|
config.update({enableDeveloperExperiments: false});
|
||||||
|
|
||||||
|
await visit('/members');
|
||||||
|
|
||||||
|
expect(currentURL()).to.equal('/');
|
||||||
|
expect(find('[data-test-nav="members"]'), 'sidebar link')
|
||||||
|
.to.not.exist;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('shows sidebar link which navigates to members list', async function () {
|
||||||
|
await visit('/');
|
||||||
|
|
||||||
|
expect(find('[data-test-nav="members"]'), 'sidebar link')
|
||||||
|
.to.exist;
|
||||||
|
|
||||||
|
await click('[data-test-nav="members"]');
|
||||||
|
|
||||||
|
expect(currentURL()).to.equal('/members');
|
||||||
|
expect(currentRouteName()).to.equal('members.index');
|
||||||
|
expect(find('[data-test-screen-title]')).to.have.text('Members');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
Loading…
Add table
Reference in a new issue