import React from 'react';
import {mount} from 'enzyme';
import {Client} from 'app/api';
import TeamStore from 'app/stores/teamStore';
import ProjectsStore from 'app/stores/projectsStore';
import OrganizationTeamProjects from 'app/views/settings/organizationTeams/teamProjects';
describe('OrganizationTeamProjects', function() {
let project;
let project2;
let team;
let putMock;
let postMock;
let deleteMock;
beforeEach(function() {
team = TestStubs.Team({slug: 'team-slug'});
project = TestStubs.Project({teams: [team]});
project2 = TestStubs.Project({
id: '3',
slug: 'project-slug-2',
name: 'Project Name 2',
});
TeamStore.loadInitialData([team]);
ProjectsStore.loadInitialData([project, project2]);
putMock = Client.addMockResponse({
method: 'PUT',
url: '/projects/org-slug/project-slug/',
body: project,
});
postMock = Client.addMockResponse({
method: 'POST',
url: `/projects/org-slug/${project2.slug}/teams/${team.slug}/`,
body: {...project2, teams: [team]},
status: 201,
});
deleteMock = Client.addMockResponse({
method: 'DELETE',
url: `/projects/org-slug/${project2.slug}/teams/${team.slug}/`,
body: {...project2, teams: []},
status: 204,
});
});
afterEach(function() {
Client.clearMockResponses();
});
it('Should render', function() {
let wrapper = mount(
,
TestStubs.routerContext()
);
expect(wrapper).toMatchSnapshot();
expect(wrapper.find('.project-name').text()).toBe('project-slug');
});
it('Should allow bookmarking', function() {
let wrapper = mount(
,
TestStubs.routerContext()
);
let star = wrapper.find('.icon-star-outline');
expect(star).toHaveLength(1);
star.simulate('click');
star = wrapper.find('.icon-star-outline');
expect(star).toHaveLength(0);
star = wrapper.find('.icon-star-solid');
expect(star).toHaveLength(1);
expect(putMock).toHaveBeenCalledTimes(1);
});
it('Should allow adding and removing projects', async function() {
let wrapper = mount(
,
TestStubs.routerContext()
);
let add = wrapper.find('DropdownButton').first();
add.simulate('click');
let el = wrapper.find('AutoCompleteItem').first();
el.simulate('click');
wrapper.update();
expect(postMock).toHaveBeenCalledTimes(1);
await tick();
wrapper.update();
// find second project's remove button
let remove = wrapper.find('PanelBody Button').at(1);
remove.simulate('click');
expect(deleteMock).toHaveBeenCalledTimes(1);
});
});