123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- import {SourceMapArchive} from 'sentry-fixture/sourceMapArchive';
- import {SourceMapArtifact} from 'sentry-fixture/sourceMapArtifact';
- import {SourceMapsDebugIDBundlesArtifacts} from 'sentry-fixture/sourceMapsDebugIDBundlesArtifacts';
- import {initializeOrg} from 'sentry-test/initializeOrg';
- import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
- import {textWithMarkupMatcher} from 'sentry-test/utils';
- import ConfigStore from 'sentry/stores/configStore';
- import {ProjectSourceMapsArtifacts} from 'sentry/views/settings/projectSourceMaps/projectSourceMapsArtifacts';
- function renderReleaseBundlesMockRequests({
- orgSlug,
- projectSlug,
- empty,
- }: {
- orgSlug: string;
- projectSlug: string;
- empty?: boolean;
- }) {
- const sourceMaps = MockApiClient.addMockResponse({
- url: `/projects/${orgSlug}/${projectSlug}/files/source-maps/`,
- body: empty
- ? []
- : [
- SourceMapArchive(),
- SourceMapArchive({
- id: 2,
- name: 'abc',
- fileCount: 3,
- date: '2023-05-06T13:41:00Z',
- }),
- ],
- });
- const sourceMapsFiles = MockApiClient.addMockResponse({
- url: `/projects/${orgSlug}/${projectSlug}/releases/bea7335dfaebc0ca6e65a057/files/`,
- body: empty ? [] : [SourceMapArtifact()],
- });
- return {sourceMaps, sourceMapsFiles};
- }
- function renderDebugIdBundlesMockRequests({
- orgSlug,
- projectSlug,
- empty,
- }: {
- orgSlug: string;
- projectSlug: string;
- empty?: boolean;
- }) {
- const artifactBundlesFiles = MockApiClient.addMockResponse({
- url: `/projects/${orgSlug}/${projectSlug}/artifact-bundles/7227e105-744e-4066-8c69-3e5e344723fc/files/`,
- body: empty ? {} : SourceMapsDebugIDBundlesArtifacts(),
- });
- return {artifactBundlesFiles};
- }
- describe('ProjectSourceMapsArtifacts', function () {
- describe('Release Bundles', function () {
- it('renders default state', async function () {
- const {organization, routerContext, project, routerProps} = initializeOrg({
- router: {
- location: {
- query: {},
- },
- params: {},
- },
- });
- ConfigStore.config = {
- ...ConfigStore.config,
- user: {...ConfigStore.config.user, isSuperuser: true},
- };
- renderReleaseBundlesMockRequests({
- orgSlug: organization.slug,
- projectSlug: project.slug,
- });
- render(
- <ProjectSourceMapsArtifacts
- {...routerProps}
- project={project}
- params={{
- orgId: organization.slug,
- projectId: project.slug,
- bundleId: 'bea7335dfaebc0ca6e65a057',
- }}
- />,
- {context: routerContext, organization}
- );
- // Title
- expect(screen.getByRole('heading')).toHaveTextContent('Release Bundle');
- // Subtitle
- expect(screen.getByText('bea7335dfaebc0ca6e65a057')).toBeInTheDocument();
- // Search bar
- expect(screen.getByPlaceholderText('Filter by Path')).toBeInTheDocument();
- // Path
- expect(
- await screen.findByText('https://example.com/AcceptOrganizationInvite.js')
- ).toBeInTheDocument();
- // Time
- expect(screen.getByText(/in 3 year/)).toBeInTheDocument();
- // File size
- expect(screen.getByText('8.1 KiB')).toBeInTheDocument();
- // Download button
- expect(screen.getByRole('button', {name: 'Download Artifact'})).toHaveAttribute(
- 'href',
- '/projects/org-slug/project-slug/releases/bea7335dfaebc0ca6e65a057/files/5678/?download=1'
- );
- });
- it('renders empty state', async function () {
- const {organization, routerProps, project, routerContext} = initializeOrg({
- router: {
- location: {
- query: {},
- },
- params: {},
- },
- });
- renderReleaseBundlesMockRequests({
- orgSlug: organization.slug,
- projectSlug: project.slug,
- empty: true,
- });
- render(
- <ProjectSourceMapsArtifacts
- {...routerProps}
- project={project}
- params={{
- orgId: organization.slug,
- projectId: project.slug,
- bundleId: 'bea7335dfaebc0ca6e65a057',
- }}
- />,
- {context: routerContext, organization}
- );
- expect(
- await screen.findByText('There are no artifacts in this archive.')
- ).toBeInTheDocument();
- });
- });
- describe('Artifact Bundles', function () {
- it('renders default state', async function () {
- const {organization, project, routerProps, routerContext} = initializeOrg({
- router: {
- location: {
- pathname: `/settings/${initializeOrg().organization.slug}/projects/${
- initializeOrg().project.slug
- }/source-maps/artifact-bundles/7227e105-744e-4066-8c69-3e5e344723fc/`,
- query: {},
- },
- params: {},
- },
- });
- ConfigStore.config = {
- ...ConfigStore.config,
- user: {...ConfigStore.config.user, isSuperuser: true},
- };
- renderDebugIdBundlesMockRequests({
- orgSlug: organization.slug,
- projectSlug: project.slug,
- });
- render(
- <ProjectSourceMapsArtifacts
- {...routerProps}
- project={project}
- params={{
- orgId: organization.slug,
- projectId: project.slug,
- bundleId: '7227e105-744e-4066-8c69-3e5e344723fc',
- }}
- />,
- {context: routerContext, organization}
- );
- // Title
- expect(screen.getByRole('heading')).toHaveTextContent('Artifact Bundle');
- // Subtitle
- expect(
- screen.getByText('7227e105-744e-4066-8c69-3e5e344723fc')
- ).toBeInTheDocument();
- // Release information
- expect(
- await screen.findByText(textWithMarkupMatcher('2 Releases associated'))
- ).toBeInTheDocument();
- await userEvent.hover(screen.getByText('2 Releases'));
- expect(
- await screen.findByText('frontend@2e318148eac9298ec04a662ae32b4b093b027f0a')
- ).toBeInTheDocument();
- // Search bar
- expect(screen.getByPlaceholderText('Filter by Path or ID')).toBeInTheDocument();
- // Path
- expect(await screen.findByText('files/_/_/main.js')).toBeInTheDocument();
- // Debug Id
- expect(
- screen.getByText('69ac68eb-cc62-44c0-a5dc-b67f219a3696')
- ).toBeInTheDocument();
- // Type
- expect(screen.getByText('Minified')).toBeInTheDocument();
- // Download Button
- expect(screen.getByRole('button', {name: 'Download Artifact'})).toHaveAttribute(
- 'href',
- '/projects/org-slug/project-slug/artifact-bundles/7227e105-744e-4066-8c69-3e5e344723fc/files/ZmlsZXMvXy9fL21haW4uanM=/?download=1'
- );
- });
- it('renders empty state', async function () {
- const {organization, project, routerProps, routerContext} = initializeOrg({
- router: {
- location: {
- pathname: `/settings/${initializeOrg().organization.slug}/projects/${
- initializeOrg().project.slug
- }/source-maps/artifact-bundles/7227e105-744e-4066-8c69-3e5e344723fc/`,
- query: {},
- },
- params: {},
- },
- });
- renderDebugIdBundlesMockRequests({
- orgSlug: organization.slug,
- projectSlug: project.slug,
- empty: true,
- });
- render(
- <ProjectSourceMapsArtifacts
- {...routerProps}
- project={project}
- params={{
- orgId: organization.slug,
- projectId: project.slug,
- bundleId: '7227e105-744e-4066-8c69-3e5e344723fc',
- }}
- />,
- {context: routerContext, organization}
- );
- expect(
- await screen.findByText('There are no artifacts in this bundle.')
- ).toBeInTheDocument();
- // TODO(Pri): Uncomment once fully transitioned to associations.
- // expect(
- // screen.getByText('No releases associated with this bundle')
- // ).toBeInTheDocument();
- });
- });
- });
|