CI: Bump lint stage to elixir-1.12
[akkoma] / test / pleroma / web / rich_media / parser / ttl / aws_signed_url_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrlTest do
6 # Relies on Cachex, needs to be synchronous
7 use Pleroma.DataCase
8
9 test "s3 signed url is parsed correct for expiration time" do
10 url = "https://pleroma.social/amz"
11
12 {:ok, timestamp} =
13 Timex.now()
14 |> DateTime.truncate(:second)
15 |> Timex.format("{ISO:Basic:Z}")
16
17 # in seconds
18 valid_till = 30
19
20 metadata = construct_metadata(timestamp, valid_till, url)
21
22 expire_time =
23 Timex.parse!(timestamp, "{ISO:Basic:Z}") |> Timex.to_unix() |> Kernel.+(valid_till)
24
25 assert {:ok, expire_time} == Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl.ttl(metadata, url)
26 end
27
28 test "s3 signed url is parsed and correct ttl is set for rich media" do
29 url = "https://pleroma.social/amz"
30
31 {:ok, timestamp} =
32 Timex.now()
33 |> DateTime.truncate(:second)
34 |> Timex.format("{ISO:Basic:Z}")
35
36 # in seconds
37 valid_till = 30
38
39 metadata = construct_metadata(timestamp, valid_till, url)
40
41 body = """
42 <meta name="twitter:card" content="Pleroma" />
43 <meta name="twitter:site" content="Pleroma" />
44 <meta name="twitter:title" content="Pleroma" />
45 <meta name="twitter:description" content="Pleroma" />
46 <meta name="twitter:image" content="#{Map.get(metadata, :image)}" />
47 """
48
49 Tesla.Mock.mock(fn
50 %{
51 method: :get,
52 url: "https://pleroma.social/amz"
53 } ->
54 %Tesla.Env{status: 200, body: body}
55 end)
56
57 Cachex.put(:rich_media_cache, url, metadata)
58
59 Pleroma.Web.RichMedia.Parser.set_ttl_based_on_image(metadata, url)
60
61 {:ok, cache_ttl} = Cachex.ttl(:rich_media_cache, url)
62
63 # as there is delay in setting and pulling the data from cache we ignore 1 second
64 # make it 2 seconds for flakyness
65 assert_in_delta(valid_till * 1000, cache_ttl, 2000)
66 end
67
68 defp construct_s3_url(timestamp, valid_till) do
69 "https://pleroma.s3.ap-southeast-1.amazonaws.com/sachin%20%281%29%20_a%20-%25%2Aasdasd%20BNN%20bnnn%20.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIBLWWK6RGDQXDLJQ%2F20190716%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=#{timestamp}&X-Amz-Expires=#{valid_till}&X-Amz-Signature=04ffd6b98634f4b1bbabc62e0fac4879093cd54a6eed24fe8eb38e8369526bbf&X-Amz-SignedHeaders=host"
70 end
71
72 defp construct_metadata(timestamp, valid_till, url) do
73 %{
74 image: construct_s3_url(timestamp, valid_till),
75 site: "Pleroma",
76 title: "Pleroma",
77 description: "Pleroma",
78 url: url
79 }
80 end
81 end