From 1210d4badb46731be71d32d6da60dc73bdce86fd Mon Sep 17 00:00:00 2001 From: Konstance Haffaney Date: Tue, 25 Feb 2025 06:00:23 +0000 Subject: [PATCH 01/11] added filter button and styling --- .../adminapi/rejected_office_users.go | 44 ++++++++++++++++++- .../RejectedOfficeUserList.jsx | 39 +++++++++++----- .../RejectedOfficeUserList.module.scss | 14 ++++++ 3 files changed, 84 insertions(+), 13 deletions(-) create mode 100644 src/pages/Admin/RejectedOfficeUsers/RejectedOfficeUserList.module.scss diff --git a/pkg/handlers/adminapi/rejected_office_users.go b/pkg/handlers/adminapi/rejected_office_users.go index f5189d5a090..c081bd1591d 100644 --- a/pkg/handlers/adminapi/rejected_office_users.go +++ b/pkg/handlers/adminapi/rejected_office_users.go @@ -66,7 +66,49 @@ var rejectedOfficeUserFilterConverters = map[string]func(string) func(*pop.Query "search": func(content string) func(*pop.Query) { return func(query *pop.Query) { nameSearch := fmt.Sprintf("%%%s%%", content) - query.Where("roles.role_name ILIKE ? AND office_users.status = 'REJECTED' OR transportation_offices.name ILIKE ? AND office_users.status = 'REJECTED' OR office_users.email ILIKE ? AND office_users.status = 'REJECTED' OR office_users.first_name ILIKE ? AND office_users.status = 'REJECTED' OR office_users.last_name ILIKE ? AND office_users.status = 'REJECTED'", nameSearch, nameSearch, nameSearch, nameSearch, nameSearch) + query.Where("office_users.first_name ILIKE ? AND office_users.status = 'REJECTED' OR office_users.last_name ILIKE ? AND office_users.status = 'REJECTED'", nameSearch, nameSearch) + } + }, + "emails": func(content string) func(*pop.Query) { + return func(query *pop.Query) { + nameSearch := fmt.Sprintf("%%%s%%", content) + query.Where("office_users.email ILIKE ? AND office_users.status = 'REJECTED'", nameSearch) + } + }, + "firstName": func(content string) func(*pop.Query) { + return func(query *pop.Query) { + nameSearch := fmt.Sprintf("%%%s%%", content) + query.Where("office_users.first_name ILIKE ? AND office_users.status = 'REJECTED'", nameSearch) + } + }, + "lastName": func(content string) func(*pop.Query) { + return func(query *pop.Query) { + nameSearch := fmt.Sprintf("%%%s%%", content) + query.Where("office_users.last_name ILIKE ? AND office_users.status = 'REJECTED'", nameSearch) + } + }, + "offices": func(content string) func(*pop.Query) { + return func(query *pop.Query) { + nameSearch := fmt.Sprintf("%%%s%%", content) + query.Where("transportation_offices.name ILIKE ? AND office_users.status = 'REJECTED'", nameSearch) + } + }, + "rejectionReason": func(content string) func(*pop.Query) { + return func(query *pop.Query) { + nameSearch := fmt.Sprintf("%%%s%%", content) + query.Where("office_users.rejection_reason ILIKE ? AND office_users.status = 'REJECTED'", nameSearch) + } + }, + "rejectedOn": func(content string) func(*pop.Query) { + return func(query *pop.Query) { + nameSearch := fmt.Sprintf("%%%s%%", content) + query.Where("office_users.rejected_on ILIKE ? AND office_users.status = 'REJECTED'", nameSearch) + } + }, + "roles": func(content string) func(*pop.Query) { + return func(query *pop.Query) { + nameSearch := fmt.Sprintf("%%%s%%", content) + query.Where("roles.role_name ILIKE ? AND office_users.status = 'REJECTED'", nameSearch) } }, } diff --git a/src/pages/Admin/RejectedOfficeUsers/RejectedOfficeUserList.jsx b/src/pages/Admin/RejectedOfficeUsers/RejectedOfficeUserList.jsx index 1a9c5f0825e..7190ab0762b 100644 --- a/src/pages/Admin/RejectedOfficeUsers/RejectedOfficeUserList.jsx +++ b/src/pages/Admin/RejectedOfficeUsers/RejectedOfficeUserList.jsx @@ -2,15 +2,19 @@ import React from 'react'; import { Datagrid, DateField, - Filter, List, ReferenceField, TextField, TextInput, TopToolbar, useRecordContext, + SearchInput, + FilterForm, + FilterButton, } from 'react-admin'; +import styles from './RejectedOfficeUserList.module.scss'; + import AdminPagination from 'scenes/SystemAdmin/shared/AdminPagination'; const RejectedOfficeUserShowRoles = () => { @@ -33,22 +37,33 @@ const ListActions = () => { return ; }; -const RejectedOfficeUserListFilter = () => ( - - - +const filterList = [ + , + , + , + , + , + , + , + , +]; + +const SearchFilters = () => ( +
+
+ +
+
+ +
+
); const defaultSort = { field: 'createdAt', order: 'DESC' }; const RejectedOfficeUserList = () => ( - } - perPage={25} - sort={defaultSort} - filters={} - actions={} - > + } perPage={25} sort={defaultSort} actions={}> + diff --git a/src/pages/Admin/RejectedOfficeUsers/RejectedOfficeUserList.module.scss b/src/pages/Admin/RejectedOfficeUsers/RejectedOfficeUserList.module.scss new file mode 100644 index 00000000000..809b3b65585 --- /dev/null +++ b/src/pages/Admin/RejectedOfficeUsers/RejectedOfficeUserList.module.scss @@ -0,0 +1,14 @@ +@import 'shared/styles/colors.scss'; + +.searchContainer { + margin-left: 15px; + margin-bottom: 10px; + + .searchBar { + float: left; + } + + .filters { + float: center; + } +} From 38d8bd627119f17dceef6c5c7ee56e5189585337 Mon Sep 17 00:00:00 2001 From: Konstance Haffaney Date: Wed, 26 Feb 2025 16:16:30 +0000 Subject: [PATCH 02/11] fix filters display --- .../RejectedOfficeUserList.jsx | 15 ++++++++++----- .../RejectedOfficeUserList.module.scss | 6 +++--- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/pages/Admin/RejectedOfficeUsers/RejectedOfficeUserList.jsx b/src/pages/Admin/RejectedOfficeUsers/RejectedOfficeUserList.jsx index 7190ab0762b..c975a975ec8 100644 --- a/src/pages/Admin/RejectedOfficeUsers/RejectedOfficeUserList.jsx +++ b/src/pages/Admin/RejectedOfficeUsers/RejectedOfficeUserList.jsx @@ -39,12 +39,12 @@ const ListActions = () => { const filterList = [ , - , + , , , - , + , , - , + , , ]; @@ -62,8 +62,13 @@ const SearchFilters = () => ( const defaultSort = { field: 'createdAt', order: 'DESC' }; const RejectedOfficeUserList = () => ( - } perPage={25} sort={defaultSort} actions={}> - + } + pagination={} + perPage={25} + sort={defaultSort} + actions={} + > diff --git a/src/pages/Admin/RejectedOfficeUsers/RejectedOfficeUserList.module.scss b/src/pages/Admin/RejectedOfficeUsers/RejectedOfficeUserList.module.scss index 809b3b65585..aa84a3f9627 100644 --- a/src/pages/Admin/RejectedOfficeUsers/RejectedOfficeUserList.module.scss +++ b/src/pages/Admin/RejectedOfficeUsers/RejectedOfficeUserList.module.scss @@ -1,14 +1,14 @@ @import 'shared/styles/colors.scss'; .searchContainer { - margin-left: 15px; - margin-bottom: 10px; + display: flex; + align-items: flex-end; .searchBar { float: left; } .filters { - float: center; + padding-bottom: 5px; } } From 27cdcd5d0067ebbbb860ba8cde3ae3aad7e1466d Mon Sep 17 00:00:00 2001 From: Konstance Haffaney Date: Thu, 27 Feb 2025 03:51:25 +0000 Subject: [PATCH 03/11] adding some frontend coverage --- src/shared/Inputs/YesNoBoolen.test.jsx | 33 ++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/shared/Inputs/YesNoBoolen.test.jsx diff --git a/src/shared/Inputs/YesNoBoolen.test.jsx b/src/shared/Inputs/YesNoBoolen.test.jsx new file mode 100644 index 00000000000..2aef823bb8e --- /dev/null +++ b/src/shared/Inputs/YesNoBoolen.test.jsx @@ -0,0 +1,33 @@ +import YesNoBoolean from './YesNoBoolean'; +import { fireEvent, getByLabelText, render } from '@testing-library/react'; +import { Provider } from 'react-redux'; +import { configureStore } from 'shared/store'; + +const testProps = { + input: { + value: true, + onChange: jest.fn(), + }, +}; + +describe('YesNoBoolean', () => { + describe('with default props', () => { + it('renders without errors', () => { + const mockStore = configureStore({}); + render( + + + , + ); + }); + + it('renders without input', () => { + const mockStore = configureStore({}); + render( + + + , + ); + }); + }); +}); From 0b306db4a4e4efcd7bba83920d42c1a09eaf17bb Mon Sep 17 00:00:00 2001 From: Konstance Haffaney Date: Mon, 3 Mar 2025 19:53:36 +0000 Subject: [PATCH 04/11] update test --- .../rejected_office_users_list_fetcher_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/services/rejected_office_users/rejected_office_users_list_fetcher_test.go b/pkg/services/rejected_office_users/rejected_office_users_list_fetcher_test.go index 3c88bec2c52..85cd8e10e74 100644 --- a/pkg/services/rejected_office_users/rejected_office_users_list_fetcher_test.go +++ b/pkg/services/rejected_office_users/rejected_office_users_list_fetcher_test.go @@ -57,7 +57,7 @@ func (suite *RejectedOfficeUsersServiceSuite) TestFetchRejectedOfficeUserList() factory.BuildOfficeUserWithRoles(suite.DB(), []factory.Customization{ { Model: models.OfficeUser{ - Status: &rejectedStatus, + Status: &rejectedStatus, }, }, }, []roles.RoleType{roles.RoleTypeTOO}) From b4649fbaefe430bcfa86a52ec3edcc70076000d6 Mon Sep 17 00:00:00 2001 From: Konstance Haffaney Date: Mon, 3 Mar 2025 19:55:34 +0000 Subject: [PATCH 05/11] update test --- .../rejected_office_users_list_fetcher_test.go | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/pkg/services/rejected_office_users/rejected_office_users_list_fetcher_test.go b/pkg/services/rejected_office_users/rejected_office_users_list_fetcher_test.go index 85cd8e10e74..c5ee2cc8c23 100644 --- a/pkg/services/rejected_office_users/rejected_office_users_list_fetcher_test.go +++ b/pkg/services/rejected_office_users/rejected_office_users_list_fetcher_test.go @@ -71,17 +71,6 @@ func (suite *RejectedOfficeUsersServiceSuite) TestFetchRejectedOfficeUserList() suite.Equal(1, len(rejectedOfficeUsers)) }) - suite.Run("if there are no rejected office users, we don't receive any rejected office users", func() { - builder := &testRejectedOfficeUsersListQueryBuilder{} - - fetcher := NewRejectedOfficeUsersListFetcher(builder) - - rejectedOfficeUsers, _, err := fetcher.FetchRejectedOfficeUsersList(suite.AppContextForTest(), nil, defaultPagination(), defaultOrdering()) - - suite.NoError(err) - suite.Equal(models.OfficeUsers(nil), rejectedOfficeUsers) - }) - suite.Run("should sort and order rejected office users", func() { rejectedStatus := models.OfficeUserStatusREJECTED rejectedOn := time.Now() From f5c94994a20b03950d0f06ace08df934f6b3ed75 Mon Sep 17 00:00:00 2001 From: Konstance Haffaney Date: Tue, 4 Mar 2025 15:11:44 +0000 Subject: [PATCH 06/11] remove duplicate migration --- migrations/app/ddl_tables_manifest.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/migrations/app/ddl_tables_manifest.txt b/migrations/app/ddl_tables_manifest.txt index 31dab5a63de..dbdaa0d05b8 100644 --- a/migrations/app/ddl_tables_manifest.txt +++ b/migrations/app/ddl_tables_manifest.txt @@ -1,7 +1,6 @@ # This is the tables migrations manifest. # If a migration is not recorded here, then it will error. # Naming convention: tbl_some_table.up.sql running will create this file. -20250224200700_tbl_ppm_shipments.up.sql 20250221195354_tbl_alter_entitlements_B-22651.up.sql 20250221195633_tbl_alter_office_users_B-21966.up.sql 20250224162949_B-22706_tbl_update_moves.up.sql From fe633a89feba802823bd6901b9b07219d7451a23 Mon Sep 17 00:00:00 2001 From: Konstance Haffaney Date: Tue, 4 Mar 2025 15:15:16 +0000 Subject: [PATCH 07/11] put back test --- .../rejected_office_users_list_fetcher_test.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pkg/services/rejected_office_users/rejected_office_users_list_fetcher_test.go b/pkg/services/rejected_office_users/rejected_office_users_list_fetcher_test.go index c5ee2cc8c23..85cd8e10e74 100644 --- a/pkg/services/rejected_office_users/rejected_office_users_list_fetcher_test.go +++ b/pkg/services/rejected_office_users/rejected_office_users_list_fetcher_test.go @@ -71,6 +71,17 @@ func (suite *RejectedOfficeUsersServiceSuite) TestFetchRejectedOfficeUserList() suite.Equal(1, len(rejectedOfficeUsers)) }) + suite.Run("if there are no rejected office users, we don't receive any rejected office users", func() { + builder := &testRejectedOfficeUsersListQueryBuilder{} + + fetcher := NewRejectedOfficeUsersListFetcher(builder) + + rejectedOfficeUsers, _, err := fetcher.FetchRejectedOfficeUsersList(suite.AppContextForTest(), nil, defaultPagination(), defaultOrdering()) + + suite.NoError(err) + suite.Equal(models.OfficeUsers(nil), rejectedOfficeUsers) + }) + suite.Run("should sort and order rejected office users", func() { rejectedStatus := models.OfficeUserStatusREJECTED rejectedOn := time.Now() From abc6e634860f2dfd1567320ab3822837442b9045 Mon Sep 17 00:00:00 2001 From: Konstance Haffaney Date: Tue, 4 Mar 2025 15:23:08 +0000 Subject: [PATCH 08/11] keep email in main search --- pkg/handlers/adminapi/rejected_office_users.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/handlers/adminapi/rejected_office_users.go b/pkg/handlers/adminapi/rejected_office_users.go index a4011b0bf75..ce032dedd3c 100644 --- a/pkg/handlers/adminapi/rejected_office_users.go +++ b/pkg/handlers/adminapi/rejected_office_users.go @@ -69,7 +69,7 @@ var rejectedOfficeUserFilterConverters = map[string]func(string) func(*pop.Query "search": func(content string) func(*pop.Query) { return func(query *pop.Query) { nameSearch := fmt.Sprintf("%%%s%%", content) - query.Where("office_users.first_name ILIKE ? AND office_users.status = 'REJECTED' OR office_users.last_name ILIKE ? AND office_users.status = 'REJECTED'", nameSearch, nameSearch) + query.Where("office_users.first_name ILIKE ? AND office_users.status = 'REJECTED' OR office_users.last_name ILIKE ? AND office_users.status = 'REJECTED' OR office_users.email ILIKE ? AND office_users.status = 'REJECTED'", nameSearch, nameSearch, nameSearch) } }, "emails": func(content string) func(*pop.Query) { From a6fddd70243087fcc1c14ebfa45dbe48c188247d Mon Sep 17 00:00:00 2001 From: Konstance Haffaney Date: Tue, 4 Mar 2025 21:29:10 +0000 Subject: [PATCH 09/11] added tests and fixed rejectedOn filter. Working weird behavior --- .../adminapi/rejected_office_users.go | 2 +- .../adminapi/rejected_office_users_test.go | 200 ++++++++++++++++++ 2 files changed, 201 insertions(+), 1 deletion(-) diff --git a/pkg/handlers/adminapi/rejected_office_users.go b/pkg/handlers/adminapi/rejected_office_users.go index ce032dedd3c..492415feb49 100644 --- a/pkg/handlers/adminapi/rejected_office_users.go +++ b/pkg/handlers/adminapi/rejected_office_users.go @@ -105,7 +105,7 @@ var rejectedOfficeUserFilterConverters = map[string]func(string) func(*pop.Query "rejectedOn": func(content string) func(*pop.Query) { return func(query *pop.Query) { nameSearch := fmt.Sprintf("%%%s%%", content) - query.Where("office_users.rejected_on ILIKE ? AND office_users.status = 'REJECTED'", nameSearch) + query.Where("TO_CHAR(office_users.rejected_on , 'MM/DD/YYYY') ILIKE ? AND office_users.status = 'REJECTED'", nameSearch) } }, "roles": func(content string) func(*pop.Query) { diff --git a/pkg/handlers/adminapi/rejected_office_users_test.go b/pkg/handlers/adminapi/rejected_office_users_test.go index bf63d53a391..8143d0e056f 100644 --- a/pkg/handlers/adminapi/rejected_office_users_test.go +++ b/pkg/handlers/adminapi/rejected_office_users_test.go @@ -4,6 +4,8 @@ import ( "fmt" "net/http" "slices" + "strconv" + "strings" "time" "github.com/go-openapi/strfmt" @@ -54,6 +56,204 @@ func (suite *HandlerSuite) TestIndexRejectedOfficeUsersHandler() { suite.True(slices.Contains(actualID, expectedID)) } }) + + suite.Run("able to search by name & email", func() { + status := models.OfficeUserStatusREJECTED + rejectionReason := "Test rejection Reason" + rejectedOn := time.Date(2025, 03, 05, 1, 1, 1, 1, time.Local) + transportationOffice := factory.BuildTransportationOffice(suite.DB(), []factory.Customization{ + { + Model: models.TransportationOffice{ + Name: "JPPO Test Office", + }, + }, + }, nil) + factory.BuildOfficeUserWithRoles(suite.DB(), []factory.Customization{ + { + Model: models.OfficeUser{ + FirstName: "Angelina", + LastName: "Jolie", + Email: "laraCroft@mail.mil", + Status: &status, + }, + }, + }, []roles.RoleType{roles.RoleTypeTOO}) + factory.BuildOfficeUserWithRoles(suite.DB(), []factory.Customization{ + { + Model: models.OfficeUser{ + FirstName: "Billy", + LastName: "Bob", + Email: "bigBob@mail.mil", + Status: &status, + }, + }, + }, []roles.RoleType{roles.RoleTypeTIO}) + factory.BuildOfficeUserWithRoles(suite.DB(), []factory.Customization{ + { + Model: models.OfficeUser{ + FirstName: "Nick", + LastName: "Cage", + Email: "conAirKilluh@mail.mil", + Status: &status, + }, + }, + }, []roles.RoleType{roles.RoleTypeServicesCounselor}) + factory.BuildOfficeUserWithRoles(suite.DB(), []factory.Customization{ + { + Model: models.OfficeUser{ + FirstName: "Nick", + LastName: "Cage", + Email: "conAirKilluh2@mail.mil", + Status: &status, + TransportationOfficeID: transportationOffice.ID, + RejectionReason: &rejectionReason, + RejectedOn: &rejectedOn, + }, + }, + { + Model: transportationOffice, + LinkOnly: true, + Type: &factory.TransportationOffices.CounselingOffice, + }, + }, []roles.RoleType{roles.RoleTypeServicesCounselor}) + + // partial first name search + nameSearch := "Nick" + filterJSON := fmt.Sprintf("{\"search\":\"%s\"}", nameSearch) + params := rejectedofficeuserop.IndexRejectedOfficeUsersParams{ + HTTPRequest: suite.setupAuthenticatedRequest("GET", "/rejected_office_users"), + Filter: &filterJSON, + } + + queryBuilder := query.NewQueryBuilder() + handler := IndexRejectedOfficeUsersHandler{ + HandlerConfig: suite.HandlerConfig(), + NewQueryFilter: query.NewQueryFilter, + RejectedOfficeUserListFetcher: rejectedofficeusers.NewRejectedOfficeUsersListFetcher(queryBuilder), + NewPagination: pagination.NewPagination, + } + + response := handler.Handle(params) + + suite.IsType(&rejectedofficeuserop.IndexRejectedOfficeUsersOK{}, response) + okResponse := response.(*rejectedofficeuserop.IndexRejectedOfficeUsersOK) + suite.Len(okResponse.Payload, 2) + suite.Equal(nameSearch, *okResponse.Payload[0].FirstName) + suite.Equal(nameSearch, *okResponse.Payload[1].FirstName) + + // email search + emailSearch := "conAirKilluh2" + filterJSON = fmt.Sprintf("{\"emails\":\"%s\"}", emailSearch) + params = rejectedofficeuserop.IndexRejectedOfficeUsersParams{ + HTTPRequest: suite.setupAuthenticatedRequest("GET", "/rejected_office_users"), + Filter: &filterJSON, + } + response = handler.Handle(params) + + suite.IsType(&rejectedofficeuserop.IndexRejectedOfficeUsersOK{}, response) + okResponse = response.(*rejectedofficeuserop.IndexRejectedOfficeUsersOK) + suite.Len(okResponse.Payload, 1) + + respEmail := *okResponse.Payload[0].Email + suite.Equal(emailSearch, respEmail[0:len(emailSearch)]) + suite.Equal(emailSearch, respEmail[0:len(emailSearch)]) + + // firstName search + firstSearch := "Angelina" + filterJSON = fmt.Sprintf("{\"firstName\":\"%s\"}", firstSearch) + params = rejectedofficeuserop.IndexRejectedOfficeUsersParams{ + HTTPRequest: suite.setupAuthenticatedRequest("GET", "/rejected_office_users"), + Filter: &filterJSON, + } + response = handler.Handle(params) + + suite.IsType(&rejectedofficeuserop.IndexRejectedOfficeUsersOK{}, response) + okResponse = response.(*rejectedofficeuserop.IndexRejectedOfficeUsersOK) + suite.Len(okResponse.Payload, 1) + suite.Equal(firstSearch, *okResponse.Payload[0].FirstName) + + // lastName search + lastSearch := "Cage" + filterJSON = fmt.Sprintf("{\"lastName\":\"%s\"}", lastSearch) + params = rejectedofficeuserop.IndexRejectedOfficeUsersParams{ + HTTPRequest: suite.setupAuthenticatedRequest("GET", "/rejected_office_users"), + Filter: &filterJSON, + } + response = handler.Handle(params) + + suite.IsType(&rejectedofficeuserop.IndexRejectedOfficeUsersOK{}, response) + okResponse = response.(*rejectedofficeuserop.IndexRejectedOfficeUsersOK) + suite.Len(okResponse.Payload, 2) + suite.Equal(lastSearch, *okResponse.Payload[0].LastName) + suite.Equal(lastSearch, *okResponse.Payload[1].LastName) + + // transportation office search + filterJSON = "{\"offices\":\"JPPO\"}" + params = rejectedofficeuserop.IndexRejectedOfficeUsersParams{ + HTTPRequest: suite.setupAuthenticatedRequest("GET", "/rejected_office_users"), + Filter: &filterJSON, + } + response = handler.Handle(params) + + suite.IsType(&rejectedofficeuserop.IndexRejectedOfficeUsersOK{}, response) + okResponse = response.(*rejectedofficeuserop.IndexRejectedOfficeUsersOK) + suite.Len(okResponse.Payload, 1) + suite.Equal(strfmt.UUID(transportationOffice.ID.String()), *okResponse.Payload[0].TransportationOfficeID) + + // rejection reason search + reasonSearch := "Test rejection" + filterJSON = fmt.Sprintf("{\"rejectionReason\":\"%s\"}", reasonSearch) + params = rejectedofficeuserop.IndexRejectedOfficeUsersParams{ + HTTPRequest: suite.setupAuthenticatedRequest("GET", "/rejected_office_users"), + Filter: &filterJSON, + } + response = handler.Handle(params) + + respRejection := *okResponse.Payload[0].RejectionReason + suite.IsType(&rejectedofficeuserop.IndexRejectedOfficeUsersOK{}, response) + okResponse = response.(*rejectedofficeuserop.IndexRejectedOfficeUsersOK) + suite.Len(okResponse.Payload, 1) + suite.Equal(reasonSearch, respRejection[0:len(reasonSearch)]) + + // rejectedOn search + rejectedOnSearch := "03" + filterJSON = fmt.Sprintf("{\"rejectedOn\":\"%s\"}", rejectedOnSearch) + params = rejectedofficeuserop.IndexRejectedOfficeUsersParams{ + HTTPRequest: suite.setupAuthenticatedRequest("GET", "/rejected_office_users"), + Filter: &filterJSON, + } + response = handler.Handle(params) + + suite.IsType(&rejectedofficeuserop.IndexRejectedOfficeUsersOK{}, response) + okResponse = response.(*rejectedofficeuserop.IndexRejectedOfficeUsersOK) + suite.Len(okResponse.Payload, 1) + + rejectedOnResp := okResponse.Payload[0].RejectedOn.String() + actualYear := strings.Split(rejectedOnResp, "-")[0] + actualMonth, err := strconv.Atoi(strings.Split(rejectedOnResp, "-")[1]) + + expectedYear := strconv.Itoa(rejectedOn.Year()) + expectedMonth := int(rejectedOn.Month()) + + suite.NoError(err) + suite.Equal(expectedYear, actualYear) + suite.Equal(expectedMonth, actualMonth) + + // roles search + roleSearch := "Services Counselor" + filterJSON = fmt.Sprintf("{\"roles\":\"%s\"}", roleSearch) + params = rejectedofficeuserop.IndexRejectedOfficeUsersParams{ + HTTPRequest: suite.setupAuthenticatedRequest("GET", "/rejected_office_users"), + Filter: &filterJSON, + } + response = handler.Handle(params) + + suite.IsType(&rejectedofficeuserop.IndexRejectedOfficeUsersOK{}, response) + okResponse = response.(*rejectedofficeuserop.IndexRejectedOfficeUsersOK) + suite.Len(okResponse.Payload, 2) + suite.Equal(roleSearch, *okResponse.Payload[0].Roles[0].RoleName) + + }) } func (suite *HandlerSuite) TestGetRejectedOfficeUserHandler() { From 8f4f9d6c81a4272669c2efcbdc5ffaf8380d5357 Mon Sep 17 00:00:00 2001 From: Konstance Haffaney Date: Tue, 4 Mar 2025 21:32:31 +0000 Subject: [PATCH 10/11] missed assert --- pkg/handlers/adminapi/rejected_office_users_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/handlers/adminapi/rejected_office_users_test.go b/pkg/handlers/adminapi/rejected_office_users_test.go index 8143d0e056f..ab11e35764b 100644 --- a/pkg/handlers/adminapi/rejected_office_users_test.go +++ b/pkg/handlers/adminapi/rejected_office_users_test.go @@ -252,6 +252,7 @@ func (suite *HandlerSuite) TestIndexRejectedOfficeUsersHandler() { okResponse = response.(*rejectedofficeuserop.IndexRejectedOfficeUsersOK) suite.Len(okResponse.Payload, 2) suite.Equal(roleSearch, *okResponse.Payload[0].Roles[0].RoleName) + suite.Equal(roleSearch, *okResponse.Payload[1].Roles[0].RoleName) }) } From e8dc58301ab33916b0b353789163eb3a0f62ceca Mon Sep 17 00:00:00 2001 From: Konstance Haffaney Date: Tue, 4 Mar 2025 22:30:02 +0000 Subject: [PATCH 11/11] merge in changes from main --- .../adminapi/rejected_office_users.go | 32 +++++++++---------- .../RejectedOfficeUserList.jsx | 2 +- .../SystemAdmin/shared/AdminPagination.jsx | 5 +-- yarn.lock | 6 ++-- 4 files changed, 21 insertions(+), 24 deletions(-) diff --git a/pkg/handlers/adminapi/rejected_office_users.go b/pkg/handlers/adminapi/rejected_office_users.go index 492415feb49..238cc968631 100644 --- a/pkg/handlers/adminapi/rejected_office_users.go +++ b/pkg/handlers/adminapi/rejected_office_users.go @@ -68,50 +68,50 @@ type IndexRejectedOfficeUsersHandler struct { var rejectedOfficeUserFilterConverters = map[string]func(string) func(*pop.Query){ "search": func(content string) func(*pop.Query) { return func(query *pop.Query) { - nameSearch := fmt.Sprintf("%%%s%%", content) - query.Where("office_users.first_name ILIKE ? AND office_users.status = 'REJECTED' OR office_users.last_name ILIKE ? AND office_users.status = 'REJECTED' OR office_users.email ILIKE ? AND office_users.status = 'REJECTED'", nameSearch, nameSearch, nameSearch) + firstSearch, lastSearch, emailSearch := fmt.Sprintf("%%%s%%", content), fmt.Sprintf("%%%s%%", content), fmt.Sprintf("%%%s%%", content) + query.Where("office_users.first_name ILIKE ? AND office_users.status = 'REJECTED' OR office_users.email ILIKE ? AND office_users.status = 'REJECTED' OR office_users.last_name ILIKE ? AND office_users.status = 'REJECTED'", firstSearch, lastSearch, emailSearch) } }, "emails": func(content string) func(*pop.Query) { return func(query *pop.Query) { - nameSearch := fmt.Sprintf("%%%s%%", content) - query.Where("office_users.email ILIKE ? AND office_users.status = 'REJECTED'", nameSearch) + emailSearch := fmt.Sprintf("%%%s%%", content) + query.Where("office_users.email ILIKE ? AND office_users.status = 'REJECTED'", emailSearch) } }, "firstName": func(content string) func(*pop.Query) { return func(query *pop.Query) { - nameSearch := fmt.Sprintf("%%%s%%", content) - query.Where("office_users.first_name ILIKE ? AND office_users.status = 'REJECTED'", nameSearch) + firstNameSearch := fmt.Sprintf("%%%s%%", content) + query.Where("office_users.first_name ILIKE ? AND office_users.status = 'REJECTED'", firstNameSearch) } }, "lastName": func(content string) func(*pop.Query) { return func(query *pop.Query) { - nameSearch := fmt.Sprintf("%%%s%%", content) - query.Where("office_users.last_name ILIKE ? AND office_users.status = 'REJECTED'", nameSearch) + lastNameSearch := fmt.Sprintf("%%%s%%", content) + query.Where("office_users.last_name ILIKE ? AND office_users.status = 'REJECTED'", lastNameSearch) } }, "offices": func(content string) func(*pop.Query) { return func(query *pop.Query) { - nameSearch := fmt.Sprintf("%%%s%%", content) - query.Where("transportation_offices.name ILIKE ? AND office_users.status = 'REJECTED'", nameSearch) + officeSearch := fmt.Sprintf("%%%s%%", content) + query.Where("transportation_offices.name ILIKE ? AND office_users.status = 'REJECTED'", officeSearch) } }, "rejectionReason": func(content string) func(*pop.Query) { return func(query *pop.Query) { - nameSearch := fmt.Sprintf("%%%s%%", content) - query.Where("office_users.rejection_reason ILIKE ? AND office_users.status = 'REJECTED'", nameSearch) + rejectionSearch := fmt.Sprintf("%%%s%%", content) + query.Where("office_users.rejection_reason ILIKE ? AND office_users.status = 'REJECTED'", rejectionSearch) } }, "rejectedOn": func(content string) func(*pop.Query) { return func(query *pop.Query) { - nameSearch := fmt.Sprintf("%%%s%%", content) - query.Where("TO_CHAR(office_users.rejected_on , 'MM/DD/YYYY') ILIKE ? AND office_users.status = 'REJECTED'", nameSearch) + RejectedOnSearch := fmt.Sprintf("%%%s%%", content) + query.Where("TO_CHAR(office_users.rejected_on , 'MM/DD/YYYY') ILIKE ? AND office_users.status = 'REJECTED'", RejectedOnSearch) } }, "roles": func(content string) func(*pop.Query) { return func(query *pop.Query) { - nameSearch := fmt.Sprintf("%%%s%%", content) - query.Where("roles.role_name ILIKE ? AND office_users.status = 'REJECTED'", nameSearch) + RoleSearch := fmt.Sprintf("%%%s%%", content) + query.Where("roles.role_name ILIKE ? AND office_users.status = 'REJECTED'", RoleSearch) } }, } diff --git a/src/pages/Admin/RejectedOfficeUsers/RejectedOfficeUserList.jsx b/src/pages/Admin/RejectedOfficeUsers/RejectedOfficeUserList.jsx index c975a975ec8..a912e938b0f 100644 --- a/src/pages/Admin/RejectedOfficeUsers/RejectedOfficeUserList.jsx +++ b/src/pages/Admin/RejectedOfficeUsers/RejectedOfficeUserList.jsx @@ -44,7 +44,7 @@ const filterList = [ , , , - , + , , ]; diff --git a/src/scenes/SystemAdmin/shared/AdminPagination.jsx b/src/scenes/SystemAdmin/shared/AdminPagination.jsx index 5afb920591f..72dd9f4de27 100644 --- a/src/scenes/SystemAdmin/shared/AdminPagination.jsx +++ b/src/scenes/SystemAdmin/shared/AdminPagination.jsx @@ -6,10 +6,7 @@ import styles from './AdminPagination.module.scss'; const AdminPagination = () => { const { isLoading, total } = useListContext(); return !isLoading && total === 0 ? ( -
- There are no results for this access code. Please check your entry to make sure you entered the correct letter - combination. -
+
No results found.
) : ( ); diff --git a/yarn.lock b/yarn.lock index 6343f5b7bed..86abd6aebb7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16502,9 +16502,9 @@ stop-iteration-iterator@^1.0.0: internal-slot "^1.0.4" store2@^2.14.2: - version "2.14.2" - resolved "https://registry.yarnpkg.com/store2/-/store2-2.14.2.tgz#56138d200f9fe5f582ad63bc2704dbc0e4a45068" - integrity sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w== + version "2.14.4" + resolved "https://registry.yarnpkg.com/store2/-/store2-2.14.4.tgz#81b313abaddade4dcd7570c5cc0e3264a8f7a242" + integrity sha512-srTItn1GOvyvOycgxjAnPA63FZNwy0PTyUBFMHRM+hVFltAeoh0LmNBz9SZqUS9mMqGk8rfyWyXn3GH5ReJ8Zw== storybook@^7.6.20: version "7.6.20"