@@ -9,7 +9,6 @@ import vscode from '../__mocks__/vscode';
9
9
import { RecoilRoot , useRecoilValue } from 'recoil' ;
10
10
import { AccountSettingProvider } from './UserContext' ;
11
11
import {
12
- AnalyzeState ,
13
12
ApplicationWebviewState ,
14
13
EventDataType ,
15
14
FixSuggestionsPayload ,
@@ -28,6 +27,7 @@ export const RecoilObserver = ({ node, onChange }) => {
28
27
describe ( 'AccountSettingProvider' , ( ) => {
29
28
afterEach ( ( ) => {
30
29
jest . clearAllMocks ( ) ;
30
+ jest . resetModules ( ) ;
31
31
} ) ;
32
32
33
33
it ( 'should recieve Get_INIT_DATA event when the component renders' , ( ) => {
@@ -753,4 +753,217 @@ describe('AccountSettingProvider', () => {
753
753
754
754
expect ( mockCurrentWorkSpaceProjectStateHandler ) . toHaveBeenCalledWith ( undefined ) ;
755
755
} ) ;
756
+
757
+ it ( 'should update Recoil state correctly on INIT_DATA event with valid payload' , ( ) => {
758
+ const mockMessageEvent = ( event : MessageEvent < MessageType > ) => {
759
+ window . dispatchEvent ( event ) ;
760
+ } ;
761
+ const mockApplicationStateHandler = jest . fn ( ) ;
762
+ const mockHasOpenTextDocumentsStateHandler = jest . fn ( ) ;
763
+ const mockHasWorkSpaceFoldersStateHandler = jest . fn ( ) ;
764
+ const mockIdentifiedProblemsStateHandler = jest . fn ( ) ;
765
+ const mockCurrentWorkSpaceProjectStateHandler = jest . fn ( ) ;
766
+ const mockCurrentEditorStateHandler = jest . fn ( ) ;
767
+
768
+ render (
769
+ < RecoilRoot >
770
+ < AccountSettingProvider >
771
+ < RecoilObserver node = { State . applicationState } onChange = { mockApplicationStateHandler } />
772
+ < RecoilObserver
773
+ node = { State . hasOpenTextDocuments }
774
+ onChange = { mockHasOpenTextDocumentsStateHandler }
775
+ />
776
+ < RecoilObserver
777
+ node = { State . hasWorkSpaceFolders }
778
+ onChange = { mockHasWorkSpaceFoldersStateHandler }
779
+ />
780
+ < RecoilObserver
781
+ node = { State . identifiedProblems }
782
+ onChange = { mockIdentifiedProblemsStateHandler }
783
+ />
784
+ < RecoilObserver
785
+ node = { State . currentWorkSpaceProject }
786
+ onChange = { mockCurrentWorkSpaceProjectStateHandler }
787
+ />
788
+ < RecoilObserver node = { State . currentEditor } onChange = { mockCurrentEditorStateHandler } />
789
+ </ AccountSettingProvider >
790
+ </ RecoilRoot > ,
791
+ ) ;
792
+
793
+ act ( ( ) => {
794
+ const payload = {
795
+ hasOpenTextDocuments : true ,
796
+ hasWorkSpaceFolders : true ,
797
+ initData : {
798
+ ...IdentifiedProblems ,
799
+ } ,
800
+ currentWorkSpaceFolder : 'exampleProject' ,
801
+ currentFile : { fileName : 'exampleFileName.git' } ,
802
+ } ;
803
+ const messageEvent = new MessageEvent < MessageType > ( 'message' , {
804
+ data : {
805
+ type : EventDataType . INIT_DATA ,
806
+ data : payload ,
807
+ } ,
808
+ } ) ;
809
+ mockMessageEvent ( messageEvent ) ;
810
+ } ) ;
811
+
812
+ expect ( mockApplicationStateHandler ) . toHaveBeenCalledWith ( ApplicationWebviewState . ANALYZE_MODE ) ;
813
+ expect ( mockHasOpenTextDocumentsStateHandler ) . toHaveBeenCalledWith ( true ) ;
814
+ expect ( mockHasWorkSpaceFoldersStateHandler ) . toHaveBeenCalledWith ( true ) ;
815
+ expect ( mockIdentifiedProblemsStateHandler ) . toHaveBeenCalledWith ( IdentifiedProblems ) ;
816
+ expect ( mockCurrentWorkSpaceProjectStateHandler ) . toHaveBeenCalledWith ( 'exampleProject' ) ;
817
+ expect ( mockCurrentEditorStateHandler ) . toHaveBeenCalledWith ( 'exampleFileName' ) ;
818
+ } ) ;
819
+
820
+ it ( 'should update Recoil state correctly on INIT_DATA event with valid payload with an edge case' , ( ) => {
821
+ const mockMessageEvent = ( event : MessageEvent < MessageType > ) => {
822
+ window . dispatchEvent ( event ) ;
823
+ } ;
824
+ const mockApplicationStateHandler = jest . fn ( ) ;
825
+ const mockHasOpenTextDocumentsStateHandler = jest . fn ( ) ;
826
+ const mockHasWorkSpaceFoldersStateHandler = jest . fn ( ) ;
827
+ const mockIdentifiedProblemsStateHandler = jest . fn ( ) ;
828
+ const mockCurrentWorkSpaceProjectStateHandler = jest . fn ( ) ;
829
+ const mockCurrentEditorStateHandler = jest . fn ( ) ;
830
+
831
+ render (
832
+ < RecoilRoot >
833
+ < AccountSettingProvider >
834
+ < RecoilObserver node = { State . applicationState } onChange = { mockApplicationStateHandler } />
835
+ < RecoilObserver
836
+ node = { State . hasOpenTextDocuments }
837
+ onChange = { mockHasOpenTextDocumentsStateHandler }
838
+ />
839
+ < RecoilObserver
840
+ node = { State . hasWorkSpaceFolders }
841
+ onChange = { mockHasWorkSpaceFoldersStateHandler }
842
+ />
843
+ < RecoilObserver
844
+ node = { State . identifiedProblems }
845
+ onChange = { mockIdentifiedProblemsStateHandler }
846
+ />
847
+ < RecoilObserver
848
+ node = { State . currentWorkSpaceProject }
849
+ onChange = { mockCurrentWorkSpaceProjectStateHandler }
850
+ />
851
+ < RecoilObserver node = { State . currentEditor } onChange = { mockCurrentEditorStateHandler } />
852
+ </ AccountSettingProvider >
853
+ </ RecoilRoot > ,
854
+ ) ;
855
+
856
+ act ( ( ) => {
857
+ const payload = {
858
+ hasOpenTextDocuments : true ,
859
+ hasWorkSpaceFolders : true ,
860
+ initData : {
861
+ ...IdentifiedProblems ,
862
+ } ,
863
+ currentWorkSpaceFolder : 'exampleProject' ,
864
+ currentFile : { } ,
865
+ } ;
866
+ const messageEvent = new MessageEvent < MessageType > ( 'message' , {
867
+ data : {
868
+ type : EventDataType . INIT_DATA ,
869
+ data : payload ,
870
+ } ,
871
+ } ) ;
872
+ mockMessageEvent ( messageEvent ) ;
873
+ } ) ;
874
+
875
+ expect ( mockApplicationStateHandler ) . toHaveBeenCalledWith ( ApplicationWebviewState . ANALYZE_MODE ) ;
876
+ expect ( mockHasOpenTextDocumentsStateHandler ) . toHaveBeenCalledWith ( true ) ;
877
+ expect ( mockHasWorkSpaceFoldersStateHandler ) . toHaveBeenCalledWith ( true ) ;
878
+ expect ( mockIdentifiedProblemsStateHandler ) . toHaveBeenCalledWith ( IdentifiedProblems ) ;
879
+ expect ( mockCurrentWorkSpaceProjectStateHandler ) . toHaveBeenCalledWith ( 'exampleProject' ) ;
880
+ expect ( mockCurrentEditorStateHandler ) . toHaveBeenCalledWith ( undefined ) ;
881
+ } ) ;
882
+
883
+ it ( 'should update Recoil state correctly on GENERATE_CLICKED_RESPONSE event with valid payload' , ( ) => {
884
+ const mockIdentifiedRecommendationStateHandler = jest . fn ( ) ;
885
+ const mockIsRecommendationLoadingStateHandler = jest . fn ( ) ;
886
+ const mockMessageEvent = ( event : MessageEvent < MessageType > ) => {
887
+ window . dispatchEvent ( event ) ;
888
+ } ;
889
+ render (
890
+ < RecoilRoot >
891
+ < AccountSettingProvider >
892
+ < RecoilObserver
893
+ node = { State . identifiedRecommendation }
894
+ onChange = { mockIdentifiedRecommendationStateHandler }
895
+ />
896
+ < RecoilObserver
897
+ node = { State . isRecommendationLoading }
898
+ onChange = { mockIsRecommendationLoadingStateHandler }
899
+ />
900
+ </ AccountSettingProvider >
901
+ </ RecoilRoot > ,
902
+ ) ;
903
+
904
+ act ( ( ) => {
905
+ const payload = {
906
+ recommendation : 'Some recommendation' ,
907
+ problemId : 'problem1' ,
908
+ } ;
909
+ const messageEvent = new MessageEvent < MessageType > ( 'message' , {
910
+ data : {
911
+ type : EventDataType . GENERATE_CLICKED_RESPONSE ,
912
+ data : payload ,
913
+ } ,
914
+ } ) ;
915
+ mockMessageEvent ( messageEvent ) ;
916
+ } ) ;
917
+
918
+ expect ( mockIdentifiedRecommendationStateHandler ) . toHaveBeenCalledWith ( {
919
+ problem1 : [ { recommendation : 'Some recommendation' } ] ,
920
+ } ) ;
921
+ expect ( mockIsRecommendationLoadingStateHandler ) . toHaveBeenCalledWith ( false ) ;
922
+ } ) ;
923
+
924
+ it ( 'should not update Recoil state on GENERATE_CLICKED_RESPONSE event with empty recommendation' , ( ) => {
925
+ const mockIdentifiedRecommendationStateHandler = jest . fn ( ) ;
926
+ const mockIsRecommendationLoadingStateHandler = jest . fn ( ) ;
927
+ const mockMessageEvent = ( event : MessageEvent < MessageType > ) => {
928
+ window . dispatchEvent ( event ) ;
929
+ } ;
930
+ render (
931
+ < RecoilRoot
932
+ initializeState = { ( { set } ) => {
933
+ set ( State . identifiedRecommendation , undefined ) ;
934
+ } }
935
+ >
936
+ < AccountSettingProvider >
937
+ < RecoilObserver
938
+ node = { State . identifiedRecommendation }
939
+ onChange = { mockIdentifiedRecommendationStateHandler }
940
+ />
941
+ < RecoilObserver
942
+ node = { State . isRecommendationLoading }
943
+ onChange = { mockIsRecommendationLoadingStateHandler }
944
+ />
945
+ </ AccountSettingProvider >
946
+ </ RecoilRoot > ,
947
+ ) ;
948
+
949
+ act ( ( ) => {
950
+ const payload = {
951
+ recommendation : '' , // Empty recommendation
952
+ problemId : 'problem2' ,
953
+ } ;
954
+ const messageEvent = new MessageEvent < MessageType > ( 'message' , {
955
+ data : {
956
+ type : EventDataType . GENERATE_CLICKED_RESPONSE ,
957
+ data : payload ,
958
+ } ,
959
+ } ) ;
960
+ mockMessageEvent ( messageEvent ) ;
961
+ } ) ;
962
+
963
+ // Ensure Recoil state remains unchanged
964
+ expect ( mockIdentifiedRecommendationStateHandler ) . toHaveBeenCalledWith ( {
965
+ problem1 : [ { recommendation : 'Some recommendation' } ] ,
966
+ } ) ;
967
+ expect ( mockIsRecommendationLoadingStateHandler ) . toHaveBeenCalledWith ( false ) ;
968
+ } ) ;
756
969
} ) ;
0 commit comments