Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3d71ec4

Browse files
100% github tab container test
1 parent 12d10e8 commit 3d71ec4

File tree

2 files changed

+109
-0
lines changed

2 files changed

+109
-0
lines changed

test/builder/graphql/user.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ export const UserBuilder = createSpecBuilderClass('User', {
1818
const login = f.login || 'login';
1919
return `https://github.com/${login}`;
2020
}},
21+
name: {default: 'Someone Somewhere'},
22+
email: {default: '[email protected]'},
2123
company: {default: 'GitHub'},
2224
repositories: {linked: RepositoryConnectionBuilder},
2325
organizations: {linked: OrganizationConnectionBuilder},
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
import React from 'react';
2+
import {shallow} from 'enzyme';
3+
import {QueryRenderer} from 'react-relay';
4+
5+
import GithubTabHeaderContainer from '../../lib/containers/github-tab-header-container';
6+
import * as reporterProxy from '../../lib/reporter-proxy';
7+
import {queryBuilder} from '../builder/graphql/query';
8+
import Remote from '../../lib/models/remote';
9+
import RemoteSet from '../../lib/models/remote-set';
10+
import Branch, {nullBranch} from '../../lib/models/branch';
11+
import BranchSet from '../../lib/models/branch-set';
12+
import GithubLoginModel from '../../lib/models/github-login-model';
13+
import {getEndpoint} from '../../lib/models/endpoint';
14+
import Refresher from '../../lib/models/refresher';
15+
import {InMemoryStrategy, INSUFFICIENT, UNAUTHENTICATED} from '../../lib/shared/keytar-strategy';
16+
17+
import tabHeaderQuery from '../../lib/containers/__generated__/githubTabHeaderContainerQuery.graphql';
18+
19+
describe.only('GithubTabHeaderContainer', function() {
20+
let atomEnv, model;
21+
22+
beforeEach(function() {
23+
atomEnv = global.buildAtomEnvironment();
24+
model = new GithubLoginModel(InMemoryStrategy);
25+
});
26+
27+
afterEach(function() {
28+
atomEnv.destroy();
29+
});
30+
31+
function buildApp(overrideProps = {}) {
32+
const origin = new Remote('origin', '[email protected]:atom/github.git');
33+
const remotes = new RemoteSet([origin]);
34+
const branch = new Branch('master', nullBranch, nullBranch, true);
35+
const branches = new BranchSet([branch]);
36+
37+
return (
38+
<GithubTabHeaderContainer
39+
loginModel={model}
40+
endpoint={getEndpoint('github.com')}
41+
getCurrentWorkDirs={() => null}
42+
{...overrideProps}
43+
/>
44+
);
45+
}
46+
47+
it('renders a null user while the GraphQL query is being performed', async function() {
48+
model.setToken('https://api.github.com', '1234');
49+
50+
sinon.spy(model, 'getToken');
51+
sinon.stub(model, 'getScopes').resolves(GithubLoginModel.REQUIRED_SCOPES);
52+
53+
const wrapper = shallow(buildApp());
54+
55+
assert.strictEqual(await wrapper.find('ObserveModel').prop('fetchData')(model), '1234');
56+
const tokenWrapper = wrapper.find('ObserveModel').renderProp('children')('1234');
57+
58+
const resultWrapper = tokenWrapper.find(QueryRenderer).renderProp('render')({
59+
error: null,
60+
props: null,
61+
retry: () => {},
62+
});
63+
64+
assert.isFalse(resultWrapper.find('GithubTabHeaderController').prop('user').isPresent());
65+
});
66+
67+
it('renders a null user if no token is found', function() {
68+
const wrapper = shallow(buildApp());
69+
const tokenWrapper = wrapper.find('ObserveModel').renderProp('children')(UNAUTHENTICATED);
70+
assert.isFalse(tokenWrapper.find('GithubTabHeaderController').prop('user').isPresent());
71+
});
72+
73+
it('renders a null user if the token has insufficient OAuth scopes', function() {
74+
const wrapper = shallow(buildApp());
75+
const tokenWrapper = wrapper.find('ObserveModel').renderProp('children')(INSUFFICIENT);
76+
77+
assert.isFalse(tokenWrapper.find('GithubTabHeaderController').prop('user').isPresent());
78+
});
79+
80+
it('renders a null user if the user is offline', function() {
81+
sinon.spy(model, 'didUpdate');
82+
83+
const wrapper = shallow(buildApp());
84+
const e = new Error('oh no');
85+
const tokenWrapper = wrapper.find('ObserveModel').renderProp('children')(e);
86+
assert.isFalse(tokenWrapper.find('GithubTabHeaderController').prop('user').isPresent());
87+
});
88+
89+
it('renders the controller once results have arrived', function() {
90+
const wrapper = shallow(buildApp());
91+
const tokenWrapper = wrapper.find('ObserveModel').renderProp('children')('1234');
92+
93+
const props = queryBuilder(tabHeaderQuery)
94+
.viewer(v => {
95+
v.name('user');
96+
v.email('[email protected]');
97+
v.avatarUrl('https://imageurl.com/test.jpg');
98+
v.login('@us3rh4nd13');
99+
})
100+
.build();
101+
const resultWrapper = tokenWrapper.find(QueryRenderer).renderProp('render')({error: null, props, retry: () => {}});
102+
103+
const controller = resultWrapper.find('GithubTabHeaderController');
104+
assert.isTrue(controller.prop('user').isPresent());
105+
assert.strictEqual(controller.prop('user').getEmail(), '[email protected]');
106+
});
107+
});

0 commit comments

Comments
 (0)