|
@@ -0,0 +1,263 @@
|
|
|
|
|
+import { setActivePinia, createPinia } from "pinia"
|
|
|
|
|
+import { FilterMatchMode } from "@primevue/core/api"
|
|
|
|
|
+
|
|
|
|
|
+let filtersStore
|
|
|
|
|
+
|
|
|
|
|
+beforeEach(() => {
|
|
|
|
|
+ setActivePinia(createPinia())
|
|
|
|
|
+ filtersStore = useFiltersStore()
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
|
|
+describe("initializes state", () => {
|
|
|
|
|
+ describe("inits emptyFilters", () => {
|
|
|
|
|
+ it("has the correct shape", () => {
|
|
|
|
|
+ expect(_keys(filtersStore.emptyFilters)).toEqual([
|
|
|
|
|
+ "global",
|
|
|
|
|
+ ..._keys(nameFields),
|
|
|
|
|
+ ..._keys(optionsFields)
|
|
|
|
|
+ ])
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("has correct defaults for string fields", () => {
|
|
|
|
|
+ expect(
|
|
|
|
|
+ _every(
|
|
|
|
|
+ _values(
|
|
|
|
|
+ _pick(filtersStore.emptyFilters, ["global", ..._keys(nameFields)])
|
|
|
|
|
+ ),
|
|
|
|
|
+ { value: "", matchMode: FilterMatchMode.CONTAINS }
|
|
|
|
|
+ )
|
|
|
|
|
+ ).toBe(true)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("has correct defaults for array fields", () => {
|
|
|
|
|
+ expect(
|
|
|
|
|
+ _every(
|
|
|
|
|
+ _values(_pick(filtersStore.emptyFilters, _keys(optionsFields))),
|
|
|
|
|
+ { value: [], matchMode: FilterMatchMode.IN }
|
|
|
|
|
+ )
|
|
|
|
|
+ ).toBe(true)
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("inits filters from emptyFilters", () => {
|
|
|
|
|
+ expect(filtersStore.filters).toEqual(filtersStore.emptyFilters)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("inits showFilters", () => {
|
|
|
|
|
+ expect(filtersStore.showFilters).toBe(false)
|
|
|
|
|
+ })
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
|
|
+describe("getters", () => {
|
|
|
|
|
+ describe("hasFilterByField", () => {
|
|
|
|
|
+ it("has the correct shape", () => {
|
|
|
|
|
+ expect(_keys(filtersStore.hasFilterByField)).toEqual(
|
|
|
|
|
+ _keys(filtersStore.filters)
|
|
|
|
|
+ )
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("returns true for non-empty string filter value", () => {
|
|
|
|
|
+ filtersStore.filters.global.value = "foo"
|
|
|
|
|
+ expect(filtersStore.hasFilterByField.global).toBe(true)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("returns true for non-empty array filter value", () => {
|
|
|
|
|
+ filtersStore.filters.player.value = ["foo"]
|
|
|
|
|
+ expect(filtersStore.hasFilterByField.player).toBe(true)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("returns true for non-default matchMode", () => {
|
|
|
|
|
+ filtersStore.filters.faeName.matchMode = FilterMatchMode.STARTS_WITH
|
|
|
|
|
+ expect(filtersStore.hasFilterByField.faeName).toBe(true)
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
|
|
+describe("actions", () => {
|
|
|
|
|
+ describe("hasAnyColumnFilters", () => {
|
|
|
|
|
+ it("returns false at initial state", () => {
|
|
|
|
|
+ expect(filtersStore.hasAnyColumnFilters()).toBe(false)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("returns true for non-empty column filter", () => {
|
|
|
|
|
+ filtersStore.filters.faeName.value = "foo"
|
|
|
|
|
+ expect(filtersStore.hasAnyColumnFilters()).toBe(true)
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ describe("hasAnyCategoryFilters", () => {
|
|
|
|
|
+ it("returns false at initial state", () => {
|
|
|
|
|
+ expect(filtersStore.hasAnyCategoryFilters()).toBe(false)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("returns true for non-empty column filter", () => {
|
|
|
|
|
+ filtersStore.filters.player.value = ["foo"]
|
|
|
|
|
+ expect(filtersStore.hasAnyCategoryFilters()).toBe(true)
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ describe("hasAnyFilters", () => {
|
|
|
|
|
+ it("returns false at initial state", () => {
|
|
|
|
|
+ expect(filtersStore.hasAnyFilters()).toBe(false)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("returns true for non-empty filter", () => {
|
|
|
|
|
+ filtersStore.filters.global.value = "foo"
|
|
|
|
|
+ expect(filtersStore.hasAnyFilters()).toBe(true)
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ describe("hasAnyFiltersFor", () => {
|
|
|
|
|
+ it("returns false at initial state with a single field", () => {
|
|
|
|
|
+ expect(filtersStore.hasAnyFiltersFor("global")).toBe(false)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("returns false at initial state with multiple fields", () => {
|
|
|
|
|
+ expect(
|
|
|
|
|
+ filtersStore.hasAnyFiltersFor(["global", "faeName", "player"])
|
|
|
|
|
+ ).toBe(false)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("returns true for non-empty filter with a single field", () => {
|
|
|
|
|
+ filtersStore.filters.global.value = "foo"
|
|
|
|
|
+ expect(filtersStore.hasAnyFiltersFor("global")).toBe(true)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("returns true for non-empty filter with multiple fields", () => {
|
|
|
|
|
+ filtersStore.filters.global.value = "foo"
|
|
|
|
|
+ expect(
|
|
|
|
|
+ filtersStore.hasAnyFiltersFor(["global", "faeName", "player"])
|
|
|
|
|
+ ).toBe(true)
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ describe("hasAnyNameFilters", () => {
|
|
|
|
|
+ it("returns false at initial state", () => {
|
|
|
|
|
+ expect(filtersStore.hasAnyNameFilters()).toBe(false)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("returns true for non-empty name filter", () => {
|
|
|
|
|
+ filtersStore.filters.faeName.value = "foo"
|
|
|
|
|
+ expect(filtersStore.hasAnyNameFilters()).toBe(true)
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ describe("hasFilterFor", () => {
|
|
|
|
|
+ it("returns false at initial state", () => {
|
|
|
|
|
+ expect(filtersStore.hasFilterFor("global")).toBe(false)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("returns false for non-empty filter with a different field", () => {
|
|
|
|
|
+ filtersStore.filters.global.value = "foo"
|
|
|
|
|
+ expect(filtersStore.hasFilterFor("player")).toBe(false)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("returns true for non-empty filter and same field", () => {
|
|
|
|
|
+ filtersStore.filters.global.value = "foo"
|
|
|
|
|
+ expect(filtersStore.hasFilterFor("global")).toBe(true)
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ describe("hasGlobalFilter", () => {
|
|
|
|
|
+ it("returns false at initial state", () => {
|
|
|
|
|
+ expect(filtersStore.hasGlobalFilter()).toBe(false)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("returns false for non-empty other filter", () => {
|
|
|
|
|
+ filtersStore.filters.faeName.value = "foo"
|
|
|
|
|
+ expect(filtersStore.hasGlobalFilter()).toBe(false)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("returns true for non-empty global filter", () => {
|
|
|
|
|
+ filtersStore.filters.global.value = "foo"
|
|
|
|
|
+ expect(filtersStore.hasGlobalFilter()).toBe(true)
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ describe("removeFilterValueFrom", () => {
|
|
|
|
|
+ let oldFilters
|
|
|
|
|
+
|
|
|
|
|
+ beforeEach(() => {
|
|
|
|
|
+ filtersStore.filters.player.value = ["foo", "bar"]
|
|
|
|
|
+ oldFilters = _clone(filtersStore.filters)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("returns false for non-array field", () => {
|
|
|
|
|
+ expect(filtersStore.removeFilterValueFrom("faeName", "foo")).toBe(false)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("doesn't modify filters for non-array field", () => {
|
|
|
|
|
+ filtersStore.removeFilterValueFrom("faeName", "foo")
|
|
|
|
|
+ expect(filtersStore.filters).toEqual(oldFilters)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("doesn't modify filter if it doesn't contain the value", () => {
|
|
|
|
|
+ filtersStore.removeFilterValueFrom("player", "qux")
|
|
|
|
|
+ expect(filtersStore.filters.player.value).toEqual(oldFilters.player.value)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("removes correct value from array filter", () => {
|
|
|
|
|
+ filtersStore.removeFilterValueFrom("player", "foo")
|
|
|
|
|
+ expect(filtersStore.filters.player.value).toEqual(["bar"])
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ describe("resetFilters", () => {
|
|
|
|
|
+ it("resets all filters", () => {
|
|
|
|
|
+ filtersStore.filters.global = {
|
|
|
|
|
+ value: "foo",
|
|
|
|
|
+ matchMode: FilterMatchMode.STARTS_WITH
|
|
|
|
|
+ }
|
|
|
|
|
+ filtersStore.filters.faeName.value = "foo"
|
|
|
|
|
+ filtersStore.resetFilters()
|
|
|
|
|
+ expect(filtersStore.filters).toEqual(filtersStore.emptyFilters)
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ describe("resetFilterFor", () => {
|
|
|
|
|
+ it("resets the given filter", () => {
|
|
|
|
|
+ filtersStore.filters.player.value = ["foo", "bar"]
|
|
|
|
|
+ filtersStore.resetFilterFor("player")
|
|
|
|
|
+ expect(filtersStore.filters.player).toEqual(
|
|
|
|
|
+ filtersStore.emptyFilters.player
|
|
|
|
|
+ )
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("doesn't modify other filters", () => {
|
|
|
|
|
+ filtersStore.filters.faeName.value = "foo"
|
|
|
|
|
+ const filtersState = filtersStore.filters
|
|
|
|
|
+ filtersStore.resetFilterFor("player")
|
|
|
|
|
+ expect(filtersStore.filters).toEqual(filtersState)
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
|
|
+describe("resetGlobalFilter", () => {
|
|
|
|
|
+ it("resets the global filter", () => {
|
|
|
|
|
+ filtersStore.filters.global = {
|
|
|
|
|
+ value: "foo",
|
|
|
|
|
+ matchMode: FilterMatchMode.STARTS_WITH
|
|
|
|
|
+ }
|
|
|
|
|
+ filtersStore.resetGlobalFilter()
|
|
|
|
|
+ expect(filtersStore.filters.global).toEqual(
|
|
|
|
|
+ filtersStore.emptyFilters.global
|
|
|
|
|
+ )
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("doesn't modify other filters", () => {
|
|
|
|
|
+ filtersStore.filters.faeName.value = "foo"
|
|
|
|
|
+ const filtersState = filtersStore.filters
|
|
|
|
|
+ filtersStore.resetGlobalFilter()
|
|
|
|
|
+ expect(filtersStore.filters.faeName).toEqual(filtersState.faeName)
|
|
|
|
|
+ })
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
|
|
+describe("toggleShowFilters", () => {
|
|
|
|
|
+ it("toggles showFilters", () => {
|
|
|
|
|
+ filtersStore.toggleShowFilters()
|
|
|
|
|
+ expect(filtersStore.showFilters).toBe(true)
|
|
|
|
|
+
|
|
|
|
|
+ filtersStore.toggleShowFilters()
|
|
|
|
|
+ expect(filtersStore.showFilters).toBe(false)
|
|
|
|
|
+ })
|
|
|
|
|
+})
|