Skip to content

Commit 154b369

Browse files
authored
Merge pull request #58 from AllenInstitute/feature/default-to-past-year-filter
Feature/default to past year filter
2 parents 55ab3c0 + 15f3dbb commit 154b369

File tree

4 files changed

+60
-22
lines changed

4 files changed

+60
-22
lines changed

packages/core/components/FileMetadataSearchBar/test/FileMetadataSearchBar.test.tsx

+51-13
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,20 @@ import { Provider } from "react-redux";
77
import FileMetadataSearchBar, { extractDateFromDateString } from "../";
88
import FileFilter from "../../../entity/FileFilter";
99
import { AnnotationName, TOP_LEVEL_FILE_ANNOTATIONS } from "../../../constants";
10-
import { initialState, selection } from "../../../state";
10+
import { initialState, reducer, reduxLogics, selection } from "../../../state";
1111

1212
describe("<FileMetadataSearchBar />", () => {
1313
const ENTER_KEY = { keyCode: 13 };
1414

15-
it("submits default file attribute when input is typed and submitted", async () => {
15+
it("submits default file attribute when input is typed and submitted with no filters applied", async () => {
1616
// Arrange
17-
const { actions, logicMiddleware, store } = configureMockStore({ state: initialState });
17+
const state = {
18+
...initialState,
19+
selection: {
20+
filters: [],
21+
},
22+
};
23+
const { actions, logicMiddleware, store } = configureMockStore({ state });
1824
const { getByRole } = render(
1925
<Provider store={store}>
2026
<FileMetadataSearchBar />
@@ -37,9 +43,34 @@ describe("<FileMetadataSearchBar />", () => {
3743
).to.be.true;
3844
});
3945

46+
it("renders with past year date filter by default", async () => {
47+
const { store } = configureMockStore({ state: initialState });
48+
const dateUpper = new Date();
49+
const dateLower = new Date();
50+
const upperYear = dateUpper.getFullYear();
51+
dateLower.setFullYear(upperYear - 1);
52+
const upperDateString = dateUpper.toDateString();
53+
const lowerDateString = dateLower.toDateString();
54+
const { getByText } = render(
55+
<Provider store={store}>
56+
<FileMetadataSearchBar />
57+
</Provider>
58+
);
59+
const uploadedDisplayName =
60+
TOP_LEVEL_FILE_ANNOTATIONS.find((a) => a.name === AnnotationName.UPLOADED)
61+
?.displayName || "";
62+
expect(getByText(uploadedDisplayName)).to.not.be.empty;
63+
expect(getByText(upperDateString)).to.not.be.empty;
64+
expect(getByText(lowerDateString)).to.not.be.empty;
65+
});
66+
4067
it("submits newly chosen file attribute when input is typed and submitted", async () => {
4168
// Arrange
42-
const { actions, logicMiddleware, store } = configureMockStore({ state: initialState });
69+
const { actions, logicMiddleware, store } = configureMockStore({
70+
state: initialState,
71+
reducer,
72+
logics: reduxLogics,
73+
});
4374
const { getByRole, getByText } = render(
4475
<Provider store={store}>
4576
<FileMetadataSearchBar />
@@ -48,7 +79,7 @@ describe("<FileMetadataSearchBar />", () => {
4879
const searchQuery = "21304404.czi";
4980

5081
// Act
51-
fireEvent.click(getByText("File name"));
82+
fireEvent.click(getByText("Uploaded"));
5283
fireEvent.click(getByText("File ID"));
5384
fireEvent.change(getByRole("searchbox"), { target: { value: searchQuery } });
5485
fireEvent.keyDown(getByRole("searchbox"), ENTER_KEY);
@@ -57,7 +88,9 @@ describe("<FileMetadataSearchBar />", () => {
5788
// Assert
5889
expect(
5990
actions.includesMatch(
60-
selection.actions.addFileFilter(new FileFilter(AnnotationName.FILE_ID, searchQuery))
91+
selection.actions.setFileFilters([
92+
new FileFilter(AnnotationName.FILE_ID, searchQuery),
93+
])
6194
)
6295
).to.be.true;
6396
});
@@ -129,8 +162,12 @@ describe("<FileMetadataSearchBar />", () => {
129162

130163
it("creates RANGE() file filter of RANGE(day,day+1) when only start date is selected", async () => {
131164
// Arrange
132-
const { actions, logicMiddleware, store } = configureMockStore({ state: initialState });
133-
const { getByText } = render(
165+
const { actions, logicMiddleware, store } = configureMockStore({
166+
state: initialState,
167+
reducer,
168+
logics: reduxLogics,
169+
});
170+
const { getByText, getAllByRole, getByRole } = render(
134171
<Provider store={store}>
135172
<FileMetadataSearchBar />
136173
</Provider>
@@ -147,18 +184,19 @@ describe("<FileMetadataSearchBar />", () => {
147184
const expectedRange = `RANGE(${startDate.toISOString()},${endDate.toISOString()})`;
148185

149186
// Act
150-
fireEvent.click(getByText("File name"));
151-
fireEvent.click(getByText("Uploaded"));
187+
const dropdownComponent = getAllByRole("combobox").at(0) as HTMLElement;
188+
fireEvent.click(dropdownComponent);
189+
fireEvent.click(getByRole("option", { name: "Uploaded" }));
152190
fireEvent.click(getByText("Start of date range"));
153191
fireEvent.click(getByText(day));
154192
await logicMiddleware.whenComplete();
155193

156194
// Assert
157195
expect(
158196
actions.includesMatch(
159-
selection.actions.addFileFilter(
160-
new FileFilter(AnnotationName.UPLOADED, expectedRange)
161-
)
197+
selection.actions.setFileFilters([
198+
new FileFilter(AnnotationName.UPLOADED, expectedRange),
199+
])
162200
)
163201
).to.be.true;
164202
});

packages/core/constants/index.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,16 @@ const DATE_LAST_MONTH = new Date(BEGINNING_OF_TODAY);
3838
DATE_LAST_MONTH.setMonth(BEGINNING_OF_TODAY.getMonth() - 1);
3939
const DATE_LAST_WEEK = new Date(BEGINNING_OF_TODAY);
4040
DATE_LAST_WEEK.setDate(BEGINNING_OF_TODAY.getDate() - 7);
41+
export const PAST_YEAR_FILTER = new FileFilter(
42+
AnnotationName.UPLOADED,
43+
`RANGE(${DATE_LAST_YEAR.toISOString()},${END_OF_TODAY.toISOString()})`
44+
);
4145
export const RELATIVE_DATE_RANGES = [
4246
{
4347
name: "Uploaded in last year",
4448
description:
4549
"This will automatically filter files down to those uploaded within the last year",
46-
filters: [
47-
new FileFilter(
48-
AnnotationName.UPLOADED,
49-
`RANGE(${DATE_LAST_YEAR.toISOString()},${END_OF_TODAY.toISOString()})`
50-
),
51-
],
50+
filters: [PAST_YEAR_FILTER],
5251
hierarchy: undefined,
5352
sort: undefined,
5453
},

packages/core/state/selection/reducer.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { makeReducer } from "@aics/redux-utils";
22
import { castArray, difference, omit, without } from "lodash";
33

44
import interaction from "../interaction";
5-
import { AnnotationName } from "../../constants";
5+
import { AnnotationName, PAST_YEAR_FILTER } from "../../constants";
66
import Annotation from "../../entity/Annotation";
77
import FileFilter from "../../entity/FileFilter";
88
import FileFolder from "../../entity/FileFolder";
@@ -58,7 +58,7 @@ export const initialState = {
5858
},
5959
displayAnnotations: [],
6060
fileSelection: new FileSelection(),
61-
filters: [],
61+
filters: [PAST_YEAR_FILTER],
6262
openFileFolders: [],
6363
shouldDisplaySmallFont: false,
6464
sortColumn: new FileSort(AnnotationName.UPLOADED, SortOrder.DESC),

packages/core/state/selection/test/logics.test.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -794,6 +794,7 @@ describe("Selection logics", () => {
794794
logics: selectionLogics,
795795
state: initialState,
796796
});
797+
const currentFilters = initialState.selection.filters;
797798

798799
// act
799800
const filter = new FileFilter("foo", 2);
@@ -804,7 +805,7 @@ describe("Selection logics", () => {
804805
expect(
805806
actions.includes({
806807
type: SET_FILE_FILTERS,
807-
payload: [filter],
808+
payload: [filter, ...currentFilters],
808809
})
809810
).to.equal(true);
810811
});

0 commit comments

Comments
 (0)