Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions src/IsaacApiTypes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -775,8 +775,6 @@ export interface AdminSearchEndpointParams {
familyName?: string;
role?: UserRole;
schoolOther?: string;
postcode?: string;
postcodeRadius?: string;
schoolURN?: string;
emailVerificationStatus?: EmailVerificationStatus;
subjectOfInterest?: string;
Expand Down
47 changes: 9 additions & 38 deletions src/app/components/pages/AdminUserManager.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,7 @@ export const AdminUserManager = () => {

const [searchUsers, {isUninitialized: searchNotRequested, isLoading: searchLoading}] = useAdminSearchUsersMutation();
const searchResults = useAppSelector(selectors.admin.userSearch);
const [searchQuery, setSearchQuery] = useState<AdminSearchEndpointParams>({
postcodeRadius: "FIVE_MILES",
});
const [searchQuery, setSearchQuery] = useState<AdminSearchEndpointParams>({});
const [selectedUserIds, setSelectedUserIds] = useState<number[]>([]);
const adminSearchResultsRef = useRef<HTMLDivElement>(null);

Expand Down Expand Up @@ -111,16 +109,13 @@ export const AdminUserManager = () => {
event.preventDefault();
let hasFilterSet = false;
for (const filter in searchQuery) {
if (filter && filter !== "postcodeRadius") {
if (filter) {
hasFilterSet = true;
}
}
if (!hasFilterSet) {
alert("At least one search filter must be set.");
}
else if (searchQuery.postcode && !/^[A-Z]{1,2}[0-9][A-Z0-9]? ?([0-9][A-Z]{2})?$/i.test(searchQuery.postcode)) {
alert("Postcode input invalid");
}
else {
adminSearchResultsRef.current?.scrollIntoView({behavior: "smooth"});
searchUsers(searchQuery);
Expand Down Expand Up @@ -173,13 +168,6 @@ export const AdminUserManager = () => {
onChange={e => setParamIfNotDefault("email", e.target.value, "")}
/>
</FormGroup>
<FormGroup>
<Label htmlFor="school-other-search">Find by manually entered school:</Label>
<Input
id="school-other-search" type="text" defaultValue={searchQuery.schoolOther || undefined}
onChange={e => setParamIfNotDefault("schoolOther", e.target.value, "")}
/>
</FormGroup>
<FormGroup>
<Label htmlFor="verification-status-search">Find by email verification status:</Label>
<Input
Expand Down Expand Up @@ -215,37 +203,20 @@ export const AdminUserManager = () => {
<option value="ADMIN">Admin</option>
</Input>
</FormGroup>
<FormGroup>
<Label htmlFor="postcode-search">Find users with school within a given distance of postcode:</Label>
<Row>
<Col md={7}>
<Input
id="postcode-search" data-testid="postcode-search" type="text" defaultValue={searchQuery.postcode || undefined} placeholder="e.g. CB3 0FD"
onChange={e => setParamIfNotDefault("postcode", e.target.value, "")}
/>
</Col>
<Col md={5} className="mt-2 mt-md-0">
<Input
id="postcode-radius-search" data-testid="postcode-radius-search" type="select" defaultValue={searchQuery.postcodeRadius}
onChange={e => setParamIfNotDefault("postcodeRadius", e.target.value, "")}
>
<option value="FIVE_MILES">5 miles</option>
<option value="TEN_MILES">10 miles</option>
<option value="FIFTEEN_MILES">15 miles</option>
<option value="TWENTY_MILES">20 miles</option>
<option value="TWENTY_FIVE_MILES">25 miles</option>
<option value="FIFTY_MILES">50 miles</option>
</Input>
</Col>
</Row>
</FormGroup>
<FormGroup>
<Label htmlFor="school-urn-search">Find a user with school URN:</Label>
<Input
id="school-urn-search" type="text" defaultValue={searchQuery.schoolURN || undefined}
onChange={e => setParamIfNotDefault("schoolURN", e.target.value, "")}
/>
</FormGroup>
<FormGroup>
<Label htmlFor="school-other-search">Find by manually entered school:</Label>
<Input
id="school-other-search" type="text" defaultValue={searchQuery.schoolOther || undefined}
onChange={e => setParamIfNotDefault("schoolOther", e.target.value, "")}
/>
</FormGroup>
</Col>
</Row>
</CardBody>
Expand Down
14 changes: 3 additions & 11 deletions src/test/pages/AdminUserManager.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ describe("AdminUserManager", () => {
*
* Will return the usersToReturn if provided, otherwise will return [mockUser].map(buildMockUserSummary).
*/
const buildSearchHandler = (adminSearchParams: AdminSearchEndpointParams, {usersToReturn, defaultUsersToReturn}: {usersToReturn?: any[], defaultUsersToReturn?: any[]}) => jest.fn(({request, params, cookies}) => {
const buildSearchHandler = (adminSearchParams: AdminSearchEndpointParams, {usersToReturn, defaultUsersToReturn}: {usersToReturn?: any[], defaultUsersToReturn?: any[]}) => jest.fn(({request, params}) => {
if (Object.entries(adminSearchParams).length === 0) return HttpResponse.json(usersToReturn
? usersToReturn.map(u => buildMockUserSummary(u, true))
: [buildMockUserSummary(mockUser, true)],
);
const url = new URL(request.url);
const searchParams = paramsToObject(url.searchParams);
// If default params, return an empty array or defaultUsersToReturn
if (!isDefined(params.postcodeRadius) && (Object.entries(searchParams).length === 1 && searchParams["postcodeRadius"] === "FIVE_MILES")) {
if (Object.entries(searchParams).length === 0) {
return HttpResponse.json(defaultUsersToReturn
? defaultUsersToReturn.map(u => buildMockUserSummary(u, true))
: []
Expand Down Expand Up @@ -72,14 +72,6 @@ describe("AdminUserManager", () => {
const schoolInput = await screen.findByLabelText<HTMLInputElement>("Find by manually entered school:");
await userEvent.type(schoolInput, params.schoolOther);
}
if (isDefined(params["postcode"])) {
const postcodeInput = await screen.findByLabelText<HTMLInputElement>("Find users with school within a given distance of postcode:");
await userEvent.type(postcodeInput, params.postcode);
}
if (isDefined(params["postcodeRadius"])) {
const radiusInput = await screen.findByTestId<HTMLInputElement>("postcode-radius-search");
await userEvent.selectOptions(radiusInput, params.postcodeRadius);
}
if (isDefined(params["schoolURN"])) {
const urnInput = await screen.findByLabelText<HTMLInputElement>("Find a user with school URN:");
await userEvent.type(urnInput, params.schoolURN);
Expand Down Expand Up @@ -155,7 +147,7 @@ describe("AdminUserManager", () => {

it("shows no list of users after searching, leaving, and coming back.", async () => {
const searchHandler = buildSearchHandler(
{postcodeRadius: 'FIVE_MILES'},
{},
{
usersToReturn: [mockUser],
}
Expand Down
Loading