Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.

Commit a566a46

Browse files
committed
Test coverage for UserMentionTooltipContainer
1 parent f81b055 commit a566a46

File tree

3 files changed

+81
-3
lines changed

3 files changed

+81
-3
lines changed

lib/containers/user-mention-tooltip-container.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import PropTypes from 'prop-types';
44

55
import Octicon from '../atom/octicon';
66

7-
class UserMentionTooltip extends React.Component {
7+
export class BareUserMentionTooltipContainer extends React.Component {
88
static propTypes = {
99
repositoryOwner: PropTypes.shape({
1010
login: PropTypes.string.isRequired,
@@ -47,7 +47,7 @@ class UserMentionTooltip extends React.Component {
4747
}
4848
}
4949

50-
export default createFragmentContainer(UserMentionTooltip, {
50+
export default createFragmentContainer(BareUserMentionTooltipContainer, {
5151
repositoryOwner: graphql`
5252
fragment userMentionTooltipContainer_repositoryOwner on RepositoryOwner {
5353
login

test/builder/graphql/user.js

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1-
import {createSpecBuilderClass} from './base';
1+
import {createSpecBuilderClass, createConnectionBuilderClass, createUnionBuilderClass, defer} from './base';
22
import {nextID} from '../id-sequence';
33

4+
const RepositoryBuilder = defer('../repository', 'RepositoryBuilder');
5+
6+
export const RepositoryConnectionBuilder = createConnectionBuilderClass('Repository', RepositoryBuilder);
7+
48
export const UserBuilder = createSpecBuilderClass('User', {
59
__typename: {default: 'User'},
610
id: {default: nextID},
@@ -10,8 +14,35 @@ export const UserBuilder = createSpecBuilderClass('User', {
1014
const login = f.login || 'login';
1115
return `https://github.com/${login}`;
1216
}},
17+
company: {default: 'GitHub'},
18+
repositories: {linked: RepositoryConnectionBuilder},
19+
},
20+
'Node & Actor & RegistryPackageOwner & RegistryPackageSearch & ProjectOwner ' +
21+
'& RepositoryOwner & UniformResourceLocatable',
22+
);
23+
24+
export const OrganizationMemberConnectionBuilder = createConnectionBuilderClass('OrganizationMember', UserBuilder);
25+
26+
export const OrganizationBuilder = createSpecBuilderClass('Organization', {
27+
login: {default: 'someone'},
28+
avatarUrl: {default: 'https://avatars3.githubusercontent.com/u/17565?s=32&v=4'},
29+
repositories: {linked: RepositoryConnectionBuilder},
30+
membersWithRole: {linked: OrganizationMemberConnectionBuilder},
31+
},
32+
'Node & Actor & RegistryPackageOwner & RegistryPackageSearch & ProjectOwner ' +
33+
'& RepositoryOwner & UniformResourceLocatable & MemberStatusable',
34+
);
35+
36+
export const RepositoryOwnerBuilder = createUnionBuilderClass('RepositoryOwner', {
37+
beUser: UserBuilder,
38+
beOrganization: OrganizationBuilder,
39+
default: 'beUser',
1340
});
1441

1542
export function userBuilder(...nodes) {
1643
return UserBuilder.onFragmentQuery(nodes);
1744
}
45+
46+
export function organizationBuilder(...nodes) {
47+
return OrganizationBuilder.onFragmentQuery(nodes);
48+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import React from 'react';
2+
import {shallow} from 'enzyme';
3+
4+
import {BareUserMentionTooltipContainer} from '../../lib/containers/user-mention-tooltip-container';
5+
import {userBuilder, organizationBuilder} from '../builder/graphql/user';
6+
7+
import ownerQuery from '../../lib/containers/__generated__/userMentionTooltipContainer_repositoryOwner.graphql';
8+
9+
describe('UserMentionTooltipContainer', function() {
10+
function buildApp(override = {}) {
11+
const props = {
12+
...override,
13+
};
14+
15+
return <BareUserMentionTooltipContainer {...props} />;
16+
}
17+
18+
it('renders information about a User', function() {
19+
const wrapper = shallow(buildApp({
20+
repositoryOwner: userBuilder(ownerQuery)
21+
.login('someone')
22+
.avatarUrl('https://i.redd.it/03xcogvbr6v21.jpg')
23+
.company('Infinity, Ltd.')
24+
.repositories(conn => conn.totalCount(5))
25+
.build(),
26+
}));
27+
28+
assert.strictEqual(wrapper.find('img').prop('src'), 'https://i.redd.it/03xcogvbr6v21.jpg');
29+
assert.isTrue(wrapper.find('span').someWhere(s => s.text() === 'Infinity, Ltd.'));
30+
assert.isTrue(wrapper.find('span').someWhere(s => s.text() === '5 repositories'));
31+
});
32+
33+
it('renders information about an Organization', function() {
34+
const wrapper = shallow(buildApp({
35+
repositoryOwner: organizationBuilder(ownerQuery)
36+
.login('acme')
37+
.avatarUrl('https://i.redd.it/eekf8onik0v21.jpg')
38+
.membersWithRole(conn => conn.totalCount(10))
39+
.repositories(conn => conn.totalCount(5))
40+
.build(),
41+
}));
42+
43+
assert.strictEqual(wrapper.find('img').prop('src'), 'https://i.redd.it/eekf8onik0v21.jpg');
44+
assert.isTrue(wrapper.find('span').someWhere(s => s.text() === '10 members'));
45+
assert.isTrue(wrapper.find('span').someWhere(s => s.text() === '5 repositories'));
46+
});
47+
});

0 commit comments

Comments
 (0)