Add tests for new helper methods
This commit is contained in:
parent
9a361fb5c1
commit
0ce84b3791
5 changed files with 157 additions and 5 deletions
|
|
@ -1,8 +1,18 @@
|
||||||
defmodule PinchflatWeb.Helpers.PaginationHelpers do
|
defmodule PinchflatWeb.Helpers.PaginationHelpers do
|
||||||
|
@moduledoc """
|
||||||
|
Methods for working with pagination, usually in the context of LiveViews or LiveComponents.
|
||||||
|
|
||||||
|
These methods are fairly simple, but they're commonly repeated across different Live entities
|
||||||
|
"""
|
||||||
|
|
||||||
alias Pinchflat.Repo
|
alias Pinchflat.Repo
|
||||||
alias Pinchflat.Utils.NumberUtils
|
alias Pinchflat.Utils.NumberUtils
|
||||||
|
|
||||||
# TODO: test
|
@doc """
|
||||||
|
Given a query, a page number, and a number of records per page, returns a map of pagination attributes.
|
||||||
|
|
||||||
|
Returns map()
|
||||||
|
"""
|
||||||
def get_pagination_attributes(query, page, records_per_page) do
|
def get_pagination_attributes(query, page, records_per_page) do
|
||||||
total_record_count = Repo.aggregate(query, :count, :id)
|
total_record_count = Repo.aggregate(query, :count, :id)
|
||||||
total_pages = max(ceil(total_record_count / records_per_page), 1)
|
total_pages = max(ceil(total_record_count / records_per_page), 1)
|
||||||
|
|
@ -17,7 +27,12 @@ defmodule PinchflatWeb.Helpers.PaginationHelpers do
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO: test
|
@doc """
|
||||||
|
Given a current page number, a direction to move in, and the total number of pages, returns the updated page number.
|
||||||
|
The updated page number is clamped to the range [1, total_pages].
|
||||||
|
|
||||||
|
Returns integer()
|
||||||
|
"""
|
||||||
def update_page_number(current_page, direction, total_pages) do
|
def update_page_number(current_page, direction, total_pages) do
|
||||||
updated_page =
|
updated_page =
|
||||||
case to_string(direction) do
|
case to_string(direction) do
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,15 @@
|
||||||
defmodule PinchflatWeb.Helpers.SortingHelpers do
|
defmodule PinchflatWeb.Helpers.SortingHelpers do
|
||||||
# TODO: test
|
@moduledoc """
|
||||||
|
Methods for working with sorting, usually in the context of LiveViews or LiveComponents.
|
||||||
|
|
||||||
|
These methods are fairly simple, but they're commonly repeated across different Live entities
|
||||||
|
"""
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Given the old sort attribute, the new sort attribute, and the old sort direction, returns the new sort direction.
|
||||||
|
|
||||||
|
Returns :asc | :desc
|
||||||
|
"""
|
||||||
def get_sort_direction(old_sort_attr, new_sort_attr, old_sort_direction) do
|
def get_sort_direction(old_sort_attr, new_sort_attr, old_sort_direction) do
|
||||||
case {new_sort_attr, old_sort_direction} do
|
case {new_sort_attr, old_sort_direction} do
|
||||||
{^old_sort_attr, :desc} -> :asc
|
{^old_sort_attr, :desc} -> :asc
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ defmodule PinchflatWeb.Sources.SourceLive.SourceEnableToggleTest do
|
||||||
|
|
||||||
describe "initial rendering" do
|
describe "initial rendering" do
|
||||||
test "renders a toggle in the on position if the source is enabled" do
|
test "renders a toggle in the on position if the source is enabled" do
|
||||||
source = %{ id: 1, enabled: true }
|
source = %{id: 1, enabled: true}
|
||||||
|
|
||||||
html = render_component(SourceEnableToggle, %{id: :foo, source: source})
|
html = render_component(SourceEnableToggle, %{id: :foo, source: source})
|
||||||
|
|
||||||
|
|
@ -16,7 +16,7 @@ defmodule PinchflatWeb.Sources.SourceLive.SourceEnableToggleTest do
|
||||||
end
|
end
|
||||||
|
|
||||||
test "renders a toggle in the off position if the source is disabled" do
|
test "renders a toggle in the off position if the source is disabled" do
|
||||||
source = %{ id: 1, enabled: false }
|
source = %{id: 1, enabled: false}
|
||||||
|
|
||||||
html = render_component(SourceEnableToggle, %{id: :foo, source: source})
|
html = render_component(SourceEnableToggle, %{id: :foo, source: source})
|
||||||
|
|
||||||
|
|
|
||||||
96
test/pinchflat_web/helpers/pagination_helpers_test.exs
Normal file
96
test/pinchflat_web/helpers/pagination_helpers_test.exs
Normal file
|
|
@ -0,0 +1,96 @@
|
||||||
|
defmodule PinchflatWeb.Helpers.PaginationHelpersTest do
|
||||||
|
use Pinchflat.DataCase
|
||||||
|
import Pinchflat.SourcesFixtures
|
||||||
|
|
||||||
|
alias Pinchflat.Sources.Source
|
||||||
|
alias PinchflatWeb.Helpers.PaginationHelpers
|
||||||
|
|
||||||
|
describe "get_pagination_attributes/3" do
|
||||||
|
test "returns the correct pagination attributes" do
|
||||||
|
source_fixture()
|
||||||
|
query = from(s in Source, select: s.id)
|
||||||
|
page = 1
|
||||||
|
records_per_page = 10
|
||||||
|
|
||||||
|
pagination_attributes = PaginationHelpers.get_pagination_attributes(query, page, records_per_page)
|
||||||
|
|
||||||
|
assert pagination_attributes.page == 1
|
||||||
|
assert pagination_attributes.total_pages == 1
|
||||||
|
assert pagination_attributes.total_record_count == 1
|
||||||
|
assert pagination_attributes.limit == 10
|
||||||
|
assert pagination_attributes.offset == 0
|
||||||
|
end
|
||||||
|
|
||||||
|
test "returns the correct pagination attributes when there are multiple pages" do
|
||||||
|
source_fixture()
|
||||||
|
source_fixture()
|
||||||
|
|
||||||
|
query = from(s in Source, select: s.id)
|
||||||
|
page = 1
|
||||||
|
records_per_page = 1
|
||||||
|
|
||||||
|
pagination_attributes = PaginationHelpers.get_pagination_attributes(query, page, records_per_page)
|
||||||
|
|
||||||
|
assert pagination_attributes.page == 1
|
||||||
|
assert pagination_attributes.total_pages == 2
|
||||||
|
assert pagination_attributes.total_record_count == 2
|
||||||
|
assert pagination_attributes.limit == 1
|
||||||
|
assert pagination_attributes.offset == 0
|
||||||
|
end
|
||||||
|
|
||||||
|
test "returns the correct attributes when on a page other than the first" do
|
||||||
|
source_fixture()
|
||||||
|
source_fixture()
|
||||||
|
|
||||||
|
query = from(s in Source, select: s.id)
|
||||||
|
page = 2
|
||||||
|
records_per_page = 1
|
||||||
|
|
||||||
|
pagination_attributes = PaginationHelpers.get_pagination_attributes(query, page, records_per_page)
|
||||||
|
|
||||||
|
assert pagination_attributes.page == 2
|
||||||
|
assert pagination_attributes.total_pages == 2
|
||||||
|
assert pagination_attributes.total_record_count == 2
|
||||||
|
assert pagination_attributes.limit == 1
|
||||||
|
assert pagination_attributes.offset == 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "update_page_number/3" do
|
||||||
|
test "increments the page number" do
|
||||||
|
current_page = 1
|
||||||
|
total_pages = 2
|
||||||
|
|
||||||
|
updated_page = PaginationHelpers.update_page_number(current_page, :inc, total_pages)
|
||||||
|
|
||||||
|
assert updated_page == 2
|
||||||
|
end
|
||||||
|
|
||||||
|
test "decrements the page number" do
|
||||||
|
current_page = 2
|
||||||
|
total_pages = 2
|
||||||
|
|
||||||
|
updated_page = PaginationHelpers.update_page_number(current_page, :dec, total_pages)
|
||||||
|
|
||||||
|
assert updated_page == 1
|
||||||
|
end
|
||||||
|
|
||||||
|
test "doesn't overflow the page number" do
|
||||||
|
current_page = 2
|
||||||
|
total_pages = 2
|
||||||
|
|
||||||
|
updated_page = PaginationHelpers.update_page_number(current_page, :inc, total_pages)
|
||||||
|
|
||||||
|
assert updated_page == 2
|
||||||
|
end
|
||||||
|
|
||||||
|
test "doesn't underflow the page number" do
|
||||||
|
current_page = 1
|
||||||
|
total_pages = 2
|
||||||
|
|
||||||
|
updated_page = PaginationHelpers.update_page_number(current_page, :dec, total_pages)
|
||||||
|
|
||||||
|
assert updated_page == 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
31
test/pinchflat_web/helpers/sorting_helpers_test.exs
Normal file
31
test/pinchflat_web/helpers/sorting_helpers_test.exs
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
defmodule PinchflatWeb.Helpers.SortingHelpersTest do
|
||||||
|
use Pinchflat.DataCase
|
||||||
|
|
||||||
|
alias PinchflatWeb.Helpers.SortingHelpers
|
||||||
|
|
||||||
|
describe "get_sort_direction/3" do
|
||||||
|
test "returns the correct sort direction when the new sort attribute is the same as the old sort attribute" do
|
||||||
|
old_sort_attr = "name"
|
||||||
|
new_sort_attr = "name"
|
||||||
|
old_sort_direction = :desc
|
||||||
|
|
||||||
|
assert SortingHelpers.get_sort_direction(old_sort_attr, new_sort_attr, old_sort_direction) == :asc
|
||||||
|
end
|
||||||
|
|
||||||
|
test "returns the correct sort direction when the new sort attribute is the same as the old sort attribute in the other direction" do
|
||||||
|
old_sort_attr = "name"
|
||||||
|
new_sort_attr = "name"
|
||||||
|
old_sort_direction = :asc
|
||||||
|
|
||||||
|
assert SortingHelpers.get_sort_direction(old_sort_attr, new_sort_attr, old_sort_direction) == :desc
|
||||||
|
end
|
||||||
|
|
||||||
|
test "returns the correct sort direction when the new sort attribute is different from the old sort attribute" do
|
||||||
|
old_sort_attr = "name"
|
||||||
|
new_sort_attr = "date"
|
||||||
|
old_sort_direction = :asc
|
||||||
|
|
||||||
|
assert SortingHelpers.get_sort_direction(old_sort_attr, new_sort_attr, old_sort_direction) == :asc
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
Reference in a new issue