Skip to content
This repository has been archived by the owner on Mar 7, 2023. It is now read-only.

Commit

Permalink
Add retrieve and display user info from the store
Browse files Browse the repository at this point in the history
  • Loading branch information
hypernikao committed Aug 1, 2017
1 parent e3522ae commit f702b47
Show file tree
Hide file tree
Showing 4 changed files with 121 additions and 21 deletions.
2 changes: 1 addition & 1 deletion live/app/components/user-logged-menu.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export default Ember.Component.extend({

init() {
this._super(...arguments);
this.set('_user', this.get('store').queryRecord('user', {}).then((user) => user));
this.get('store').queryRecord('user', {}).then((user) => this.set('_user', user));
},

actions: {
Expand Down
32 changes: 25 additions & 7 deletions live/app/templates/components/user-logged-menu.hbs
Original file line number Diff line number Diff line change
@@ -1,7 +1,25 @@
<div class="logged-user-name" {{action 'toggleUserMenu'}} role="button" aria-haspopup="true"
aria-expanded="{{_canDisplayMenu}}">
<a href="#" role="button" class="logged-user-name__link">
{{concat user.firstName ' ' user.lastName}}
<span class="caret"></span>
</a>
</div>
{{#if _user}}
<div class="logged-user-name" {{action 'toggleUserMenu'}} role="button" aria-haspopup="true"
aria-expanded="{{_canDisplayMenu}}">
<a href="#" role="button" class="logged-user-name__link">
{{concat _user.firstName ' ' _user.lastName}}
<span class="caret"></span>
</a>
</div>
{{#if _canDisplayMenu}}
<div class="logged-user-menu">
<ul class="logged-user-menu__list">
<li class="logged-user-menu__item user-menu-item">
<div class="user-menu-item__details-firstname"> {{_user.firstName}}</div>
<div class="user-menu-item__details-email">{{_user.email}}</div>
<div class="user-menu-item__account-link">
<button>Mon compte</button>
</div>

</li>
<li class="logged-user-menu__item user-menu__item--logout">
{{#link-to 'logout' class="logged-user-menu__item-logout"}}se déconnecter{{/link-to}}</li>
</ul>
</div>
{{/if}}
{{/if}}
93 changes: 91 additions & 2 deletions live/tests/integration/components/user-logged-menu-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,29 @@ import { expect } from 'chai';
import { describe, it } from 'mocha';
import { setupComponentTest } from 'ember-mocha';
import hbs from 'htmlbars-inline-precompile';
import Ember from 'ember';
import wait from 'ember-test-helpers/wait';

describe.only('Integration | Component | user logged menu', function() {
describe('Integration | Component | user logged menu', function() {
setupComponentTest('user-logged-menu', {
integration: true
});

describe('Default rendering', function() {
describe('Default rendering for logged user', function() {

beforeEach(function() {
// given
this.register('service:store', Ember.Service.extend({
queryRecord() {
return Ember.RSVP.resolve({
firstName: 'FHI',
lastName: '4EVER',
email: 'FHI@4EVER.fr'
});
}
}));
this.inject.service('store', { as: 'store' });

// when
this.render(hbs`{{user-logged-menu}}`);
});
Expand All @@ -24,7 +38,82 @@ describe.only('Integration | Component | user logged menu', function() {
// then
expect(this.$('.logged-user-name')).to.have.length(1);
expect(this.$('.logged-user-name__link')).to.have.length(1);
expect(this.$('.logged-user-name__link').text().trim()).to.be.equal('FHI 4EVER');
});

});

describe('behavior on user menu', function() {

it('should hide user menu, when no action on user-name', function() {
// when
this.render(hbs`{{user-logged-menu}}`);

// then
expect(this.$('.logged-user-menu')).to.have.length(0);
});

beforeEach(function() {
this.register('service:store', Ember.Service.extend({
queryRecord() {
return Ember.RSVP.resolve({
firstName: 'FHI',
lastName: '4EVER',
email: 'FHI@4EVER.fr'
});
}
}));
this.inject.service('store', { as: 'store' });
});

it('should display a user menu, when user-name is clicked', function() {
// given
this.render(hbs`{{user-logged-menu}}`);

// when
this.$('.logged-user-name').click();

return wait().then(() => {
// then
expect(this.$('.logged-user-menu')).to.have.length(1);
expect(this.$('.user-menu-item__details-firstname').text().trim()).to.equal('FHI');
expect(this.$('.user-menu-item__details-email').text().trim()).to.equal('FHI@4EVER.fr');
});
});

it('should hide user menu, when it was previously open and user-name is clicked one more time', function() {
// when
this.render(hbs`{{user-logged-menu}}`);
this.$('.logged-user-name').click();
this.$('.logged-user-name').click();

return wait().then(() => {
// then
expect(this.$('.logged-user-menu')).to.have.length(0);
});
});

});

describe('behavior when user is unlogged or not found', function() {

beforeEach(function() {
this.register('service:store', Ember.Service.extend({
queryRecord() {
return Ember.RSVP.reject();
}
}));
this.inject.service('store', { as: 'store' });
});

it('should not display user information, for unlogged', function() {
// when
this.render(hbs`{{user-logged-menu}}`);

// then
return wait().then(() => {
expect(this.$('.logged-user-name')).to.have.length(0);
});
});
});
});
15 changes: 4 additions & 11 deletions live/tests/unit/components/user-logged-menu-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { beforeEach, describe, it } from 'mocha';
import { setupTest } from 'ember-mocha';
import Ember from 'ember';

describe.only('Unit | Component | User logged Menu', function() {
describe('Unit | Component | User logged Menu', function() {
setupTest('component:user-logged-menu', {});

describe('action#toggleUserMenu', function() {
Expand Down Expand Up @@ -64,19 +64,12 @@ describe.only('Unit | Component | User logged Menu', function() {
this.inject.service('store', { as: 'store' });
});

it('should return user info details', function() {
it('should correctly call store', function() {
// when
const component = this.subject();
this.subject();

// then
return component.get('_user').then((user) => {
expect(user).to.deep.equal({
firstName: 'FHI',
lastName: '4EVER',
email: 'FHI@4EVER.fr'
});
expect(queryRecordArgs).to.deep.equal(['user', {}]);
});
expect(queryRecordArgs).to.deep.equal(['user', {}]);
});

});
Expand Down

0 comments on commit f702b47

Please sign in to comment.