diff --git a/ui/src/App.test.js b/ui/src/App.test.js
new file mode 100644
index 000000000..aac84206d
--- /dev/null
+++ b/ui/src/App.test.js
@@ -0,0 +1,94 @@
+import React from "react";
+
+import { shallow } from "enzyme";
+
+import { NewUnappliedFilter } from "Stores/AlertStore";
+import { App } from "./App";
+
+beforeEach(() => {
+ // createing App instance will push current filters into window.location
+ // ensure it's wiped after each test
+ window.history.pushState({}, "App", "/");
+});
+
+afterEach(() => {
+ window.history.pushState({}, "App", "/");
+});
+
+describe("", () => {
+ it("uses passed default filters if there's no query args or saved filters", () => {
+ expect(window.location.search).toBe("");
+ const tree = shallow();
+ const instance = tree.instance();
+ expect(instance.alertStore.filters.values).toHaveLength(1);
+ expect(instance.alertStore.filters.values[0]).toMatchObject(
+ NewUnappliedFilter("foo=bar")
+ );
+ });
+
+ it("uses saved filters if there's no query args (ignoring passed defaults)", () => {
+ expect(window.location.search).toBe("");
+ localStorage.setItem(
+ "savedFilters",
+ JSON.stringify({
+ filters: ["bar=baz", "abc!=cba"],
+ present: true
+ })
+ );
+
+ const tree = shallow();
+ const instance = tree.instance();
+
+ expect(localStorage.getItem).toHaveBeenCalledWith("savedFilters");
+
+ expect(instance.alertStore.filters.values).toHaveLength(2);
+ expect(instance.alertStore.filters.values[0]).toMatchObject(
+ NewUnappliedFilter("bar=baz")
+ );
+ expect(instance.alertStore.filters.values[1]).toMatchObject(
+ NewUnappliedFilter("abc!=cba")
+ );
+ });
+
+ it("ignores saved filters if 'preset' key is falsey (use passed defaults)", () => {
+ expect(window.location.search).toBe("");
+ localStorage.setItem(
+ "savedFilters",
+ JSON.stringify({
+ filters: ["ignore=saved"],
+ present: false
+ })
+ );
+
+ const tree = shallow();
+ const instance = tree.instance();
+
+ expect(localStorage.getItem).toHaveBeenCalledWith("savedFilters");
+
+ expect(instance.alertStore.filters.values).toHaveLength(1);
+ expect(instance.alertStore.filters.values[0]).toMatchObject(
+ NewUnappliedFilter("use=defaults")
+ );
+ });
+
+ it("uses filters passed via ?q= query args (ignoring saved filters and passed defaults)", () => {
+ expect(window.location.search).toBe("");
+ localStorage.setItem(
+ "savedFilters",
+ JSON.stringify({
+ filters: ["ignore=saved"],
+ present: true
+ })
+ );
+
+ window.history.pushState({}, "App", "/?q=use%3Dquery");
+
+ const tree = shallow();
+ const instance = tree.instance();
+
+ expect(instance.alertStore.filters.values).toHaveLength(1);
+ expect(instance.alertStore.filters.values[0]).toMatchObject(
+ NewUnappliedFilter("use=query")
+ );
+ });
+});