From 6bf7707da484d55133a42cb99561d918c4707605 Mon Sep 17 00:00:00 2001 From: lakshmi2506 Date: Thu, 1 Feb 2024 12:47:50 +0000 Subject: [PATCH] frontend tests added --- docs/api/schema.yml | 4 +- metecho/api/jobs.py | 6 +- metecho/api/models.py | 4 +- metecho/api/serializers.py | 2 +- metecho/api/views.py | 2 +- .../tasks/retrieveMetadata/changes.tsx | 13 +--- .../tasks/retrieveMetadata/index.test.jsx | 78 ++++++++++++++++++- 7 files changed, 88 insertions(+), 21 deletions(-) diff --git a/docs/api/schema.yml b/docs/api/schema.yml index 382a1e6c7..86aaec41d 100644 --- a/docs/api/schema.yml +++ b/docs/api/schema.yml @@ -1700,10 +1700,10 @@ components: ListMetadataRequest: type: object properties: - desiredType: string + desired_type: string minLength: 1 required: - - desiredType + - desired_type CommitRequest: type: object properties: diff --git a/metecho/api/jobs.py b/metecho/api/jobs.py index f89de7865..9d7d069d3 100644 --- a/metecho/api/jobs.py +++ b/metecho/api/jobs.py @@ -651,17 +651,17 @@ def get_unsaved_changes(scratch_org, *, originating_user_id): get_unsaved_changes_job = job(get_unsaved_changes) -def get_nonsource_components(*, scratch_org, desiredType, originating_user_id): +def get_nonsource_components(*, scratch_org, desired_type, originating_user_id): try: scratch_org.refresh_from_db() with dataset_env(scratch_org) as (project_config, org_config, sf, schema, repo): components = ListComponents( org_config=org_config, project_config=project_config, - task_config=TaskConfig({"options": {"metadata_types": desiredType}}), + task_config=TaskConfig({"options": {"metadata_types": desired_type}}), )() - scratch_org.non_source_changes[desiredType] = [ + scratch_org.non_source_changes[desired_type] = [ cmp["MemberName"] for cmp in components ] except Exception as e: diff --git a/metecho/api/models.py b/metecho/api/models.py index 4d0e8feb6..e16a0ca67 100644 --- a/metecho/api/models.py +++ b/metecho/api/models.py @@ -1475,7 +1475,7 @@ def queue_get_unsaved_changes(self, *, force_get=False, originating_user_id): get_unsaved_changes_job.delay(self, originating_user_id=originating_user_id) - def queue_get_nonsource_components(self, *, originating_user_id, desiredType: str): + def queue_get_nonsource_components(self, *, originating_user_id, desired_type: str): from .jobs import get_nonsource_components_job self.currently_refreshing_changes = True @@ -1483,7 +1483,7 @@ def queue_get_nonsource_components(self, *, originating_user_id, desiredType: st self.notify_changed(originating_user_id=originating_user_id) get_nonsource_components_job.delay( scratch_org=self, - desiredType=desiredType, + desired_type=desired_type, originating_user_id=originating_user_id, ) diff --git a/metecho/api/serializers.py b/metecho/api/serializers.py index cccfeb2a7..090c4bb46 100644 --- a/metecho/api/serializers.py +++ b/metecho/api/serializers.py @@ -1154,7 +1154,7 @@ class CommitSerializer(serializers.Serializer): class ListMetadataSerializer(serializers.Serializer): - desiredType = serializers.CharField() + desired_type = serializers.CharField() class CommitDatasetSerializer(serializers.Serializer): diff --git a/metecho/api/views.py b/metecho/api/views.py index 510da360e..046580713 100644 --- a/metecho/api/views.py +++ b/metecho/api/views.py @@ -722,7 +722,7 @@ def listmetadata(self, request, pk=None): status=status.HTTP_403_FORBIDDEN, ) scratch_org.queue_get_nonsource_components( - desiredType=serializer.validated_data["desiredType"], + desired_type=serializer.validated_data["desired_type"], originating_user_id=str(request.user.id), ) return Response( diff --git a/src/js/components/tasks/retrieveMetadata/changes.tsx b/src/js/components/tasks/retrieveMetadata/changes.tsx index 3f8d78c04..78ea6ddd8 100644 --- a/src/js/components/tasks/retrieveMetadata/changes.tsx +++ b/src/js/components/tasks/retrieveMetadata/changes.tsx @@ -34,10 +34,6 @@ interface Props { refreshing: boolean; } -export interface Components { - desiredType: string; -} - const ChangesList = ({ type, allChanges, @@ -193,10 +189,7 @@ const ChangesForm = ({ ...expandedPanels, [groupName]: !expandedPanels[groupName], }); - const match = groupName.match(/changes-(.+)/); - - // Check if there is a match and get the group name - const alpha = match ? match[1] : null; + const metadata_type = groupName.match(/changes-(.+)/)?.[1]; if (expandedPanels[groupName] === undefined) { await apiFetch({ url: window.api_urls.scratch_org_listmetadata(id), @@ -204,7 +197,7 @@ const ChangesForm = ({ opts: { method: 'POST', body: JSON.stringify({ - desiredType: alpha, + desired_type: metadata_type, }), headers: { 'Content-Type': 'application/json', @@ -392,7 +385,7 @@ const ChangesForm = ({ slds-p-vertical_x-small slds-p-right_medium" > -

Non source trackable

+ Non-Source-Trackable {refreshing ? ( ) : ( diff --git a/test/js/components/tasks/retrieveMetadata/index.test.jsx b/test/js/components/tasks/retrieveMetadata/index.test.jsx index 24d8b7be5..b3e9f0abd 100644 --- a/test/js/components/tasks/retrieveMetadata/index.test.jsx +++ b/test/js/components/tasks/retrieveMetadata/index.test.jsx @@ -1,4 +1,5 @@ import { fireEvent, waitFor } from '@testing-library/react'; +import fetchMock from 'fetch-mock'; import React from 'react'; import { MemoryRouter } from 'react-router-dom'; @@ -30,6 +31,11 @@ const defaultChangeset = { Buz: ['Baz', 'Bing'], }; +const defaultComponents = { + Alpha: ['Beta'], + Gamma: ['Delta', 'Theta'], +}; + const defaultIgnored = { Bang: ['Bazinga'], }; @@ -41,6 +47,9 @@ const defaultOrg = { unsaved_changes: defaultChangeset, ignored_changes: defaultIgnored, valid_target_directories: defaultDirs, + non_source_changes: defaultComponents, + has_non_source_changes: true, + currently_refreshing_changes: false, }; describe('', () => { @@ -266,7 +275,7 @@ describe('', () => { }); describe('select changes', () => { - let getters, selectAll, selectAllIgnored, group1, group2, inputs; + let getters, selectAll, selectAllIgnored, group1, group2, group3, inputs; beforeEach(() => { getters = setup(); @@ -276,11 +285,13 @@ describe('', () => { selectAllIgnored = getByLabelText('All Ignored Changes'); group1 = getByLabelText('Buz'); group2 = getByLabelText('Bang'); + group3 = getByLabelText('Alpha'); inputs = [ getByLabelText('Bar'), getByLabelText('Baz'), getByLabelText('Bing'), getByLabelText('Bazinga'), + getByLabelText('Beta'), ]; }); @@ -292,6 +303,7 @@ describe('', () => { expect(inputs[1].checked).toBe(true); expect(inputs[2].checked).toBe(true); expect(inputs[3].checked).toBe(false); + expect(inputs[4].checked).toBe(false); fireEvent.click(selectAllIgnored); @@ -299,6 +311,7 @@ describe('', () => { expect(inputs[1].checked).toBe(true); expect(inputs[2].checked).toBe(true); expect(inputs[3].checked).toBe(true); + expect(inputs[4].checked).toBe(false); fireEvent.click(selectAll); @@ -306,6 +319,7 @@ describe('', () => { expect(inputs[1].checked).toBe(false); expect(inputs[2].checked).toBe(false); expect(inputs[3].checked).toBe(true); + expect(inputs[4].checked).toBe(false); fireEvent.click(selectAllIgnored); @@ -313,6 +327,7 @@ describe('', () => { expect(inputs[1].checked).toBe(false); expect(inputs[2].checked).toBe(false); expect(inputs[3].checked).toBe(false); + expect(inputs[4].checked).toBe(false); }); }); @@ -324,6 +339,7 @@ describe('', () => { expect(inputs[1].checked).toBe(true); expect(inputs[2].checked).toBe(true); expect(inputs[3].checked).toBe(false); + expect(inputs[4].checked).toBe(false); fireEvent.click(group2); @@ -331,6 +347,7 @@ describe('', () => { expect(inputs[1].checked).toBe(true); expect(inputs[2].checked).toBe(true); expect(inputs[3].checked).toBe(true); + expect(inputs[4].checked).toBe(false); fireEvent.click(group1); @@ -338,6 +355,7 @@ describe('', () => { expect(inputs[1].checked).toBe(false); expect(inputs[2].checked).toBe(false); expect(inputs[3].checked).toBe(true); + expect(inputs[4].checked).toBe(false); fireEvent.click(group2); @@ -345,6 +363,14 @@ describe('', () => { expect(inputs[1].checked).toBe(false); expect(inputs[2].checked).toBe(false); expect(inputs[3].checked).toBe(false); + expect(inputs[4].checked).toBe(false); + + fireEvent.click(group3); + expect(inputs[0].checked).toBe(false); + expect(inputs[1].checked).toBe(false); + expect(inputs[2].checked).toBe(false); + expect(inputs[3].checked).toBe(false); + expect(inputs[4].checked).toBe(true); }); }); @@ -356,6 +382,7 @@ describe('', () => { expect(inputs[1].checked).toBe(true); expect(inputs[2].checked).toBe(false); expect(inputs[3].checked).toBe(false); + expect(inputs[4].checked).toBe(false); fireEvent.click(inputs[2]); @@ -363,6 +390,7 @@ describe('', () => { expect(inputs[1].checked).toBe(true); expect(inputs[2].checked).toBe(true); expect(inputs[3].checked).toBe(false); + expect(inputs[4].checked).toBe(false); fireEvent.click(inputs[3]); @@ -370,6 +398,7 @@ describe('', () => { expect(inputs[1].checked).toBe(true); expect(inputs[2].checked).toBe(true); expect(inputs[3].checked).toBe(true); + expect(inputs[4].checked).toBe(false); fireEvent.click(inputs[2]); @@ -377,6 +406,7 @@ describe('', () => { expect(inputs[1].checked).toBe(true); expect(inputs[2].checked).toBe(false); expect(inputs[3].checked).toBe(true); + expect(inputs[4].checked).toBe(false); fireEvent.click(inputs[3]); @@ -384,6 +414,14 @@ describe('', () => { expect(inputs[1].checked).toBe(true); expect(inputs[2].checked).toBe(false); expect(inputs[3].checked).toBe(false); + expect(inputs[4].checked).toBe(false); + + fireEvent.click(inputs[4]); + expect(inputs[0].checked).toBe(false); + expect(inputs[1].checked).toBe(true); + expect(inputs[2].checked).toBe(false); + expect(inputs[3].checked).toBe(false); + expect(inputs[4].checked).toBe(true); }); }); @@ -391,11 +429,12 @@ describe('', () => { test('expands/collapses', () => { const { baseElement, getByTitle } = getters; const panels = baseElement.querySelectorAll('.slds-accordion__content'); - + const url = window.api_urls.scratch_org_listmetadata('org-id'); expect(panels[0]).toHaveAttribute('aria-hidden', 'true'); expect(panels[1]).toHaveAttribute('aria-hidden', 'true'); expect(panels[2]).toHaveAttribute('aria-hidden', 'true'); expect(panels[3]).toHaveAttribute('aria-hidden', 'true'); + expect(panels[4]).toHaveAttribute('aria-hidden', 'true'); fireEvent.click(getByTitle('Buz')); @@ -403,6 +442,7 @@ describe('', () => { expect(panels[1]).toHaveAttribute('aria-hidden', 'true'); expect(panels[2]).toHaveAttribute('aria-hidden', 'true'); expect(panels[3]).toHaveAttribute('aria-hidden', 'true'); + expect(panels[4]).toHaveAttribute('aria-hidden', 'true'); fireEvent.click(getByTitle('Bang')); @@ -410,6 +450,7 @@ describe('', () => { expect(panels[1]).toHaveAttribute('aria-hidden', 'true'); expect(panels[2]).toHaveAttribute('aria-hidden', 'true'); expect(panels[3]).toHaveAttribute('aria-hidden', 'false'); + expect(panels[4]).toHaveAttribute('aria-hidden', 'true'); fireEvent.click(getByTitle('All Ignored Changes')); @@ -417,10 +458,43 @@ describe('', () => { expect(panels[1]).toHaveAttribute('aria-hidden', 'true'); expect(panels[2]).toHaveAttribute('aria-hidden', 'false'); expect(panels[3]).toHaveAttribute('aria-hidden', 'false'); + expect(panels[4]).toHaveAttribute('aria-hidden', 'true'); + + fetchMock.postOnce(url, { + options: { desired_type: 'Alpha' }, + }); + fireEvent.click(getByTitle('Alpha')); + expect(panels[0]).toHaveAttribute('aria-hidden', 'false'); + expect(panels[1]).toHaveAttribute('aria-hidden', 'true'); + expect(panels[2]).toHaveAttribute('aria-hidden', 'false'); + expect(panels[3]).toHaveAttribute('aria-hidden', 'false'); + expect(panels[4]).toHaveAttribute('aria-hidden', 'false'); + + fireEvent.click(getByTitle('Alpha')); + expect(panels[0]).toHaveAttribute('aria-hidden', 'false'); + expect(panels[1]).toHaveAttribute('aria-hidden', 'true'); + expect(panels[2]).toHaveAttribute('aria-hidden', 'false'); + expect(panels[3]).toHaveAttribute('aria-hidden', 'false'); + expect(panels[4]).toHaveAttribute('aria-hidden', 'true'); }); }); }); + test('checks for the spinner', () => { + const { getByText, rerender, store } = setup(); + fireEvent.click(getByText('Save & Next')); + setup({ + org: { + ...defaultOrg, + currently_refreshing_changes: true, + }, + store, + rerender, + }); + const nonSourceTrackableElement = getByText('Loading...'); + expect(nonSourceTrackableElement).not.toBeNull(); + }); + describe('commit message', () => { let getters;