import {render, screen, waitFor} from 'sentry-test/reactTestingLibrary';
import ActorAvatar from 'sentry/components/avatar/actorAvatar';
import MemberListStore from 'sentry/stores/memberListStore';
import OrganizationStore from 'sentry/stores/organizationStore';
import TeamStore from 'sentry/stores/teamStore';
import {Team, User} from 'sentry/types';
describe('ActorAvatar', function () {
const user: User = {
...TestStubs.User(),
id: '1',
name: 'JanActore Bloggs',
email: 'janebloggs@example.com',
};
const team1: Team = {
...TestStubs.Team(),
id: '3',
slug: 'cool-team',
name: 'COOL TEAM',
};
beforeEach(function () {
MemberListStore.loadInitialData([user]);
TeamStore.loadInitialData([team1]);
});
describe('render()', function () {
it('should show a gravatar when actor type is a user', function () {
const {container} = render(
);
expect(container).toSnapshot();
});
it('should not show a gravatar when actor type is a team', function () {
const {container} = render(
);
expect(screen.getByText('CT')).toBeInTheDocument();
expect(container).toSnapshot();
});
it('should return null when actor type is a unknown', function () {
render(
);
expect(screen.queryByText('CT')).not.toBeInTheDocument();
});
it('should fetch a team not in the store', async function () {
const organization = TestStubs.Organization();
OrganizationStore.onUpdate(organization, {replace: true});
const team2 = TestStubs.Team({id: '2', name: 'COOL TEAM', slug: 'cool-team'});
const mockRequest = MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/teams/`,
method: 'GET',
body: [team2],
});
render(
);
await waitFor(() => expect(mockRequest).toHaveBeenCalled());
expect(screen.getByText('CT')).toBeInTheDocument();
});
});
});