Skip to content

Commit

Permalink
setup member relationship on organizations
Browse files Browse the repository at this point in the history
  • Loading branch information
Dhaulagiri committed Feb 12, 2018
1 parent cec7646 commit 497a654
Show file tree
Hide file tree
Showing 24 changed files with 148 additions and 5 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,9 @@ this.get('store').query('github-release', { repo: 'jimmay5469/old-hash' }); // g
this.get('store').queryRecord('github-pull', { repo: 'jimmay5469/old-hash', pullId: 1 }); // get a specific pull request
this.get('store').query('github-pull', { repo: 'jimmay5469/old-hash' }); // get a repo's pull requests
this.get('store').queryRecord('github-blob', { repo: 'jimmay5469/old-hash', sha: '47c5438403ca875f170db2aa07d1bfa3689406e3' }); // get a file's contents

this.get('store').findRecord('github-organization', { org: 'my-org' });
this.get('store').query('github-members', { org: 'my-org' })
```

## Contributing
Expand Down
10 changes: 10 additions & 0 deletions addon/adapters/github-member.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import GithubAdapter from 'ember-data-github/adapters/github';

export default GithubAdapter.extend({
urlForQuery(query) {
const org = query.org;
delete query.org;

return `${this.get('host')}/orgs/${org}/members`;
},
});
11 changes: 11 additions & 0 deletions addon/models/github-member.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import Model from 'ember-data/model';
import attr from 'ember-data/attr';

export default Model.extend({
login: attr('string'),
avatarUrl: attr('string'),
gravatarId: attr('string'),
type: attr('string'),
siteAdmin: attr('boolean'),
url: attr('string')
});
2 changes: 1 addition & 1 deletion addon/models/github-organization.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ export default Model.extend({
name: attr('string'),
avatarUrl: attr('string'),

users: hasMany('github-user'),
members: hasMany('github-member', { inverse: null }),
repositories: hasMany('github-repository')
});
3 changes: 3 additions & 0 deletions addon/serializers/github-member.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import GithubSerializer from './github';

export default GithubSerializer.extend({});
2 changes: 1 addition & 1 deletion addon/serializers/github-organization.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ export default GithubSerializer.extend({
normalize(modelClass, resourceHash, prop) {
resourceHash.id = resourceHash.recordId || resourceHash.login;
resourceHash.links = {
users: resourceHash.members_url.replace(/\{\/member\}/, ''),
members: resourceHash.members_url.replace(/\{\/member\}/, ''),
repositories: resourceHash.repos_url
};
return this._super(modelClass, resourceHash, prop);
Expand Down
1 change: 1 addition & 0 deletions app/adapters/github-member.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default } from 'ember-data-github/adapters/github-member';
1 change: 1 addition & 0 deletions app/mirage-factories/github-member.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default } from 'ember-data-github/mirage-factories/github-member';
1 change: 1 addition & 0 deletions app/mirage-models/github-member.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default } from 'ember-data-github/mirage-models/github-member';
1 change: 1 addition & 0 deletions app/models/github-member.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default } from 'ember-data-github/models/github-member';
1 change: 1 addition & 0 deletions app/serializers/github-member.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default } from 'ember-data-github/serializers/github-member';
17 changes: 17 additions & 0 deletions tests/acceptance/github-organization-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,20 @@ test(`finding an organization's repositories`, function (assert) {
});
});
});

test(`finding an organization's members`, function (assert) {
assert.expect(4);
server.create('github-organization', 'withMembers');
container.lookup('service:github-session').set('githubAccessToken', 'abc123');

return run(() => {
return store.findRecord('githubOrganization', 'organization0').then((organization) => {
return organization.get('members').then(function (members) {
assert.equal(members.get('length'), 2);
assert.githubMemberOk(members.toArray()[0]);
assert.equal(server.pretender.handledRequests.length, 2);
assert.equal(server.pretender.handledRequests[1].requestHeaders.Authorization, 'token abc123');
});
});
});
});
4 changes: 4 additions & 0 deletions tests/dummy/mirage/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,4 +80,8 @@ export default function() {
this.get('orgs/:org/repos', (schema, { params }) => {
return schema.githubOrganizations.findBy({ login: params.org }).repositories;
});

this.get('orgs/:org/members', (schema, { params }) => {
return schema.githubOrganizations.findBy({ login: params.org }).members;
});
}
16 changes: 16 additions & 0 deletions tests/dummy/mirage/factories/github-member.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { Factory } from 'ember-cli-mirage';

export default Factory.extend({
login: function(i) {
return `member${i}`;
},
type: 'github-member',
avatar_url: function(i) {
return `member${i}-avatar.gif`;
},
gravatar_id: '',
site_admin: false,
url: function(i) {
return `https://api.github.com/users/member${i}`;
}
});
5 changes: 5 additions & 0 deletions tests/dummy/mirage/factories/github-organization.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,9 @@ export default Factory.extend({
server.createList('githubRepository', 2, { owner: organization });
}
}),
withMembers: trait({
afterCreate(organization) {
server.createList('githubMember', 2, { organization });
}
})
});
5 changes: 5 additions & 0 deletions tests/dummy/mirage/models/github-member.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { Model, belongsTo } from 'ember-cli-mirage';

export default Model.extend({
organization: belongsTo('github-organization')
});
2 changes: 1 addition & 1 deletion tests/dummy/mirage/models/github-organization.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Model, hasMany } from 'ember-cli-mirage';

export default Model.extend({
users: hasMany('github-user'),
members: hasMany('github-member'),
repositories: hasMany('github-repository')
});
20 changes: 20 additions & 0 deletions tests/helpers/custom-helpers/assert-github-member-ok.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { registerHelper } from '@ember/test';
import QUnit from 'qunit';
import assertionBuilder from '../utils/defined-attribute-assertion-builder';

QUnit.assert.githubMemberOk = assertionBuilder([
'id',
'login',
'avatarUrl',
'gravatarId',
'url',
'type',
'siteAdmin'
]);

export default registerHelper(
'assertGithubMemberOk',
function (app, assert, member) {
assert.githubMemberOk(member);
}
);
1 change: 1 addition & 0 deletions tests/helpers/start-app.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import './custom-helpers/assert-github-release-ok';
import './custom-helpers/assert-github-blob-ok';
import './custom-helpers/assert-github-tree-ok';
import './custom-helpers/assert-github-pull-ok';
import './custom-helpers/assert-github-member-ok';

export default function startApp(attrs) {
let attributes = merge({}, config.APP);
Expand Down
16 changes: 16 additions & 0 deletions tests/unit/adapters/github-member-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { moduleFor, test } from 'ember-qunit';

moduleFor('adapter:github-member', 'Unit | Adapter | github member', {
needs: ['service:github-session']
});

test('it builds the organization\'s members URL correctly', function(assert) {
let adapter = this.subject();
const host = adapter.get('host');
const org = 'ember';
const query = {
org,
};

assert.equal(adapter.buildURL('github-member', null, null, 'query', query), `${host}/orgs/${org}/members`);
});
2 changes: 1 addition & 1 deletion tests/unit/adapters/github-organization-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ test('it builds the index URL correctly', function(assert) {
assert.equal(adapter.buildURL('organizations', null, null), `${host}/orgs`);
});

test('it build the specified org URL correctly', function(assert) {
test('it builds the specified org URL correctly', function(assert) {
let adapter = this.subject();
const host = adapter.get('host');
const org = 'ember';
Expand Down
12 changes: 12 additions & 0 deletions tests/unit/models/github-member-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { moduleForModel, test } from 'ember-qunit';

moduleForModel('github-member', 'Unit | Model | github member', {
// Specify the other units that are required for this test.
needs: []
});

test('it exists', function(assert) {
let model = this.subject();
// let store = this.store();
assert.ok(!!model);
});
15 changes: 15 additions & 0 deletions tests/unit/serializers/github-member-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { moduleForModel, test } from 'ember-qunit';

moduleForModel('github-member', 'Unit | Serializer | github member', {
// Specify the other units that are required for this test.
needs: ['serializer:github-member']
});

// Replace this with your real tests.
test('it serializes records', function(assert) {
let record = this.subject();

let serializedRecord = record.serialize();

assert.ok(serializedRecord);
});
2 changes: 1 addition & 1 deletion tests/unit/serializers/github-organization-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ moduleForModel('github-organization', 'Unit | Serializer | github organization',
'serializer:github-organization',
'model:githubRepository',
'model:githubBranch',
'model:githubUser'
'model:githubMember'
]
});

Expand Down

0 comments on commit 497a654

Please sign in to comment.