Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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';
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i left this and the serializer test in to be consistent but since none of these tests actually do anything I would be 👍 on removing them all at some point

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yea it's fine to leave this for a project-wide cleanup.


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