flake_id_test.exs 1.42 KB
Newer Older
href's avatar
href committed
1
# Pleroma: A lightweight social networking server
href's avatar
2019    
href committed
2
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
href's avatar
href committed
3
4
5
6
7
8
9
10
11
12
13
# 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
14
      assert from_string(42) == fake_flake
href's avatar
href committed
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    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
42
43
44
45
46

  test "is_flake_id?/1" do
    assert is_flake_id?("9eoozpwTul5mjSEDRI")
    refute is_flake_id?("http://example.com/activities/3ebbadd1-eb14-4e20-8118-b6f79c0c7b0b")
  end
href's avatar
href committed
47
end