@@ -977,4 +977,194 @@ describe("ZendeskService", () => {
977977 expect ( requestMock ) . toHaveBeenCalledTimes ( 1 ) ;
978978 } ) ;
979979 } ) ;
980+
981+ describe ( "getActiveViews" , ( ) => {
982+ const viewSample = {
983+ active : true ,
984+ conditions : {
985+ group_id : 1
986+ } ,
987+ created_at : "2023-01-01T00:00:00Z" ,
988+ default : false ,
989+ description : "Test View" ,
990+ execution : {
991+ group_by : "group_by" ,
992+ sort_by : "sort_by" ,
993+ group_order : "asc" ,
994+ sort_order : "asc"
995+ }
996+ } ;
997+
998+ it ( "should fetch active views with the correct data" , async ( ) => {
999+ requestMock . mockResolvedValueOnce ( { views : [ viewSample ] } ) ;
1000+
1001+ const result = await service . getActiveViews ( ) ;
1002+
1003+ expect ( requestMock ) . toHaveBeenCalledWith ( {
1004+ url : `/api/v2/views/active`
1005+ } ) ;
1006+ expect ( result ) . toEqual ( [ viewSample ] ) ;
1007+ } ) ;
1008+ } ) ;
1009+
1010+ describe ( "getViews" , ( ) => {
1011+ const viewSample = {
1012+ active : true ,
1013+ conditions : {
1014+ group_id : 1
1015+ } ,
1016+ created_at : "2023-01-01T00:00:00Z" ,
1017+ default : false ,
1018+ description : "Test View" ,
1019+ execution : {
1020+ group_by : "group_by" ,
1021+ sort_by : "sort_by" ,
1022+ group_order : "asc" ,
1023+ sort_order : "asc"
1024+ }
1025+ } ;
1026+
1027+ it ( "should fetch views with the correct data" , async ( ) => {
1028+ requestMock . mockResolvedValueOnce ( { views : [ viewSample ] } ) ;
1029+
1030+ const result = await service . getViews ( ) ;
1031+
1032+ expect ( requestMock ) . toHaveBeenCalledWith ( {
1033+ url : `/api/v2/views`
1034+ } ) ;
1035+ expect ( result ) . toEqual ( [ viewSample ] ) ;
1036+ } ) ;
1037+ } ) ;
1038+
1039+ describe ( "searchViews" , ( ) => {
1040+ const viewSample = {
1041+ active : true ,
1042+ conditions : { } ,
1043+ created_at : "2023-01-01T00:00:00Z" ,
1044+ default : false ,
1045+ description : "View for recent tickets" ,
1046+ execution : { } ,
1047+ id : 25 ,
1048+ position : 3 ,
1049+ restriction : { } ,
1050+ title : "Tickets updated less than 12 Hours" ,
1051+ updated_at : "2023-01-01T00:00:00Z"
1052+ } ;
1053+
1054+ const inactiveViewSample = {
1055+ active : false ,
1056+ conditions : { } ,
1057+ created_at : "2023-01-01T00:00:00Z" ,
1058+ default : false ,
1059+ description : "View for tickets that are not assigned" ,
1060+ execution : { } ,
1061+ id : 23 ,
1062+ position : 7 ,
1063+ restriction : { } ,
1064+ title : "Unassigned tickets" ,
1065+ updated_at : "2023-01-01T00:00:00Z"
1066+ } ;
1067+
1068+ it ( "should search views with query string" , async ( ) => {
1069+ requestMock . mockResolvedValueOnce ( { views : [ viewSample ] } ) ;
1070+
1071+ const result = await service . searchViews ( "tickets" ) ;
1072+
1073+ expect ( requestMock ) . toHaveBeenCalledWith ( {
1074+ url : `/api/v2/views/search?query=tickets`
1075+ } ) ;
1076+ expect ( result ) . toEqual ( [ viewSample ] ) ;
1077+ } ) ;
1078+
1079+ it ( "should search views with query string and access filter" , async ( ) => {
1080+ requestMock . mockResolvedValueOnce ( { views : [ viewSample ] } ) ;
1081+
1082+ const result = await service . searchViews ( "tickets" , { access : "shared" } ) ;
1083+
1084+ expect ( requestMock ) . toHaveBeenCalledWith ( {
1085+ url : `/api/v2/views/search?query=tickets&access=shared`
1086+ } ) ;
1087+ expect ( result ) . toEqual ( [ viewSample ] ) ;
1088+ } ) ;
1089+
1090+ it ( "should search views with query string and active filter" , async ( ) => {
1091+ requestMock . mockResolvedValueOnce ( { views : [ viewSample ] } ) ;
1092+
1093+ const result = await service . searchViews ( "tickets" , { active : true } ) ;
1094+
1095+ expect ( requestMock ) . toHaveBeenCalledWith ( {
1096+ url : `/api/v2/views/search?query=tickets&active=true`
1097+ } ) ;
1098+ expect ( result ) . toEqual ( [ viewSample ] ) ;
1099+ } ) ;
1100+
1101+ it ( "should search views with query string and group_id filter" , async ( ) => {
1102+ requestMock . mockResolvedValueOnce ( { views : [ viewSample ] } ) ;
1103+
1104+ const result = await service . searchViews ( "tickets" , { group_id : 123 } ) ;
1105+
1106+ expect ( requestMock ) . toHaveBeenCalledWith ( {
1107+ url : `/api/v2/views/search?query=tickets&group_id=123`
1108+ } ) ;
1109+ expect ( result ) . toEqual ( [ viewSample ] ) ;
1110+ } ) ;
1111+
1112+ it ( "should search views with query string and sort parameters" , async ( ) => {
1113+ requestMock . mockResolvedValueOnce ( { views : [ viewSample ] } ) ;
1114+
1115+ const result = await service . searchViews ( "tickets" , { sort_by : "alphabetical" , sort_order : "asc" } ) ;
1116+
1117+ expect ( requestMock ) . toHaveBeenCalledWith ( {
1118+ url : `/api/v2/views/search?query=tickets&sort_by=alphabetical&sort_order=asc`
1119+ } ) ;
1120+ expect ( result ) . toEqual ( [ viewSample ] ) ;
1121+ } ) ;
1122+
1123+ it ( "should search views with all options" , async ( ) => {
1124+ requestMock . mockResolvedValueOnce ( { views : [ viewSample , inactiveViewSample ] } ) ;
1125+
1126+ const result = await service . searchViews ( "tickets" , {
1127+ access : "personal" ,
1128+ active : false ,
1129+ group_id : 456 ,
1130+ include : "sideload" ,
1131+ sort_by : "updated_at" ,
1132+ sort_order : "desc"
1133+ } ) ;
1134+
1135+ expect ( requestMock ) . toHaveBeenCalledWith ( {
1136+ url : `/api/v2/views/search?query=tickets&access=personal&active=false&group_id=456&include=sideload&sort_by=updated_at&sort_order=desc`
1137+ } ) ;
1138+ expect ( result ) . toEqual ( [ viewSample , inactiveViewSample ] ) ;
1139+ } ) ;
1140+
1141+ it ( "should continue calling the API until next_page disappears" , async ( ) => {
1142+ requestMock
1143+ . mockResolvedValueOnce ( { views : [ viewSample ] , next_page : "next_page" } )
1144+ . mockResolvedValueOnce ( { views : [ inactiveViewSample ] } ) ;
1145+
1146+ const result = await service . searchViews ( "tickets" ) ;
1147+
1148+ expect ( requestMock ) . toHaveBeenCalledTimes ( 2 ) ;
1149+ expect ( requestMock ) . toHaveBeenNthCalledWith ( 1 , {
1150+ url : `/api/v2/views/search?query=tickets`
1151+ } ) ;
1152+ expect ( requestMock ) . toHaveBeenNthCalledWith ( 2 , {
1153+ url : "next_page"
1154+ } ) ;
1155+ expect ( result ) . toEqual ( [ viewSample , inactiveViewSample ] ) ;
1156+ } ) ;
1157+
1158+ it ( "should only call the API one time when fetchAllViews is false" , async ( ) => {
1159+ requestMock . mockResolvedValueOnce ( { views : [ viewSample ] , next_page : "next_page" } ) ;
1160+
1161+ const result = await service . searchViews ( "tickets" , undefined , false ) ;
1162+
1163+ expect ( requestMock ) . toHaveBeenCalledTimes ( 1 ) ;
1164+ expect ( requestMock ) . toHaveBeenCalledWith ( {
1165+ url : `/api/v2/views/search?query=tickets`
1166+ } ) ;
1167+ expect ( result ) . toEqual ( [ viewSample ] ) ;
1168+ } ) ;
1169+ } ) ;
9801170} ) ;
0 commit comments