Test FlakeID old id compat & Ecto type
This commit is contained in:
parent
28d77e373c
commit
9d63b27dcd
2 changed files with 47 additions and 0 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
defmodule Pleroma.FlakeId do
|
defmodule Pleroma.FlakeId do
|
||||||
@moduledoc """
|
@moduledoc """
|
||||||
Flake is a decentralized, k-ordered id generation service.
|
Flake is a decentralized, k-ordered id generation service.
|
||||||
|
@ -38,6 +42,8 @@ defmodule Pleroma.FlakeId do
|
||||||
def from_string(unquote(Kernel.to_string(i))), do: <<0::integer-size(128)>>
|
def from_string(unquote(Kernel.to_string(i))), do: <<0::integer-size(128)>>
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def from_string(flake = <<_::integer-size(128)>>), do: flake
|
||||||
|
|
||||||
def from_string(string) when is_binary(string) and byte_size(string) < 18 do
|
def from_string(string) when is_binary(string) and byte_size(string) < 18 do
|
||||||
case Integer.parse(string) do
|
case Integer.parse(string) do
|
||||||
{id, _} -> <<0::integer-size(64), id::integer-size(64)>>
|
{id, _} -> <<0::integer-size(64), id::integer-size(64)>>
|
||||||
|
|
41
test/flake_id_test.exs
Normal file
41
test/flake_id_test.exs
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.FlakeIdTest do
|
||||||
|
use Pleroma.DataCase
|
||||||
|
import Kernel, except: [to_string: 1]
|
||||||
|
import Pleroma.FlakeId
|
||||||
|
|
||||||
|
describe "fake flakes (compatibility with older serial integers)" do
|
||||||
|
test "from_string/1" do
|
||||||
|
fake_flake = <<0::integer-size(64), 42::integer-size(64)>>
|
||||||
|
assert from_string("42") == fake_flake
|
||||||
|
end
|
||||||
|
|
||||||
|
test "zero or -1 is a null flake" do
|
||||||
|
fake_flake = <<0::integer-size(128)>>
|
||||||
|
assert from_string("0") == fake_flake
|
||||||
|
assert from_string("-1") == fake_flake
|
||||||
|
end
|
||||||
|
|
||||||
|
test "to_string/1" do
|
||||||
|
fake_flake = <<0::integer-size(64), 42::integer-size(64)>>
|
||||||
|
assert to_string(fake_flake) == "42"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
test "ecto type behaviour" do
|
||||||
|
flake = <<0, 0, 1, 104, 80, 229, 2, 235, 140, 22, 69, 201, 53, 210, 0, 0>>
|
||||||
|
flake_s = "9eoozpwTul5mjSEDRI"
|
||||||
|
|
||||||
|
assert cast(flake) == {:ok, flake_s}
|
||||||
|
assert cast(flake_s) == {:ok, flake_s}
|
||||||
|
|
||||||
|
assert load(flake) == {:ok, flake_s}
|
||||||
|
assert load(flake_s) == {:ok, flake_s}
|
||||||
|
|
||||||
|
assert dump(flake_s) == {:ok, flake}
|
||||||
|
assert dump(flake) == {:ok, flake}
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue