diff options
Diffstat (limited to 'test')
7 files changed, 232 insertions, 0 deletions
| diff --git a/test/fixtures/birthdays/misskey-user.json b/test/fixtures/birthdays/misskey-user.json new file mode 100644 index 000000000..4ffee3910 --- /dev/null +++ b/test/fixtures/birthdays/misskey-user.json @@ -0,0 +1 @@ +{"@context":["https://www.w3.org/ns/activitystreams","https://w3id.org/security/v1",{"manuallyApprovesFollowers":"as:manuallyApprovesFollowers","sensitive":"as:sensitive","Hashtag":"as:Hashtag","quoteUrl":"as:quoteUrl","toot":"http://joinmastodon.org/ns#","Emoji":"toot:Emoji","featured":"toot:featured","discoverable":"toot:discoverable","schema":"http://schema.org#","PropertyValue":"schema:PropertyValue","value":"schema:value","misskey":"https://misskey.io/ns#","_misskey_content":"misskey:_misskey_content","_misskey_quote":"misskey:_misskey_quote","_misskey_reaction":"misskey:_misskey_reaction","_misskey_votes":"misskey:_misskey_votes","_misskey_talk":"misskey:_misskey_talk","isCat":"misskey:isCat","vcard":"http://www.w3.org/2006/vcard/ns#"}],"type":"Person","id":"https://misskey.io/users/8dhi2ne167","inbox":"https://misskey.io/users/8dhi2ne167/inbox","outbox":"https://misskey.io/users/8dhi2ne167/outbox","followers":"https://misskey.io/users/8dhi2ne167/followers","following":"https://misskey.io/users/8dhi2ne167/following","sharedInbox":"https://misskey.io/inbox","endpoints":{"sharedInbox":"https://misskey.io/inbox"},"url":"https://misskey.io/@mkljczk","preferredUsername":"mkljczk","name":null,"summary":null,"icon":null,"image":null,"tag":[],"manuallyApprovesFollowers":false,"discoverable":true,"publicKey":{"id":"https://misskey.io/users/8dhi2ne167#main-key","type":"Key","owner":"https://misskey.io/users/8dhi2ne167","publicKeyPem":"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA7CI3Ol1M0TDdLL+E8Uhd\nJ8l/RTEtxl39MKxsqSCZr9itf/EBn4dGTifK9LN3XZD2fjmX4hdwaxndp2HYVDqn\ndc6O57u8dHxFv9wTwXQrLzEonOzbrBec6WB42ZpkFHi4XEyqg8iYGu5Yy7ttXJ21\nOfWqi+eytttcTErKuu4z8MX1L1IlmpfSmH1trMyDZLFMRqVJ0416/qI0K3l3cmIf\n8cuWbJ57UxVbYxp9242der/3vrNIU24rAouYQYe1atUgFPKil3w8dCY7magy36Wg\nOXC1hdRsFcsVW54/3cSQ9fc/+1HIg16/zlS+AWb4dVDhrAUJLYIBrkMPRnu/cDuI\ndvyL+KtZUxhDBoSO0JLrd1+GZGt0WD+mfutCugJS8IGlWQmGq8WRmM2vYfZgEYkq\nCv4392VSsWvg4iluKz0eX+8l7QKHseJwGBvk89Txlz6f7QkooBXYuuyHZS1ZLZBW\nfooK+RNAquDU+cVUu1gVt1V5yt3IxF1qvMRtlElNJKN5NUJT9/K2YcVX6UoMXhDd\noSOpARqPm9E2pdjI62pAOBbCplMSoBprhoCYm0iozf9QhNyUBGWDcTsFDDgqOwy4\nYjGQ5jsnCrkhSzRkTViWD+Pgw+Ar4fxcjySGUf0x7HkNfteDPSdLMD8J2vTJXfoB\nGAQQmGMZmFgONC62FrDphlsCAwEAAQ==\n-----END PUBLIC KEY-----\n"},"isCat":true,"vcard:bday":"2001-02-12"}
\ No newline at end of file diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs index a5a9021f6..a9a3004a8 100644 --- a/test/pleroma/user_test.exs +++ b/test/pleroma/user_test.exs @@ -755,6 +755,54 @@ defmodule Pleroma.UserTest do      end    end +  describe "user registration, with :birthday_required and :birthday_min_age" do +    @full_user_data %{ +      bio: "A guy", +      name: "my name", +      nickname: "nick", +      password: "test", +      password_confirmation: "test", +      email: "email@example.com" +    } + +    setup do +      clear_config([:instance, :birthday_required], true) +      clear_config([:instance, :birthday_min_age], 18 * 365) +    end + +    test "it passes when correct birth date is provided" do +      today = Date.utc_today() +      birthday = Date.add(today, -19 * 365) + +      params = +        @full_user_data +        |> Map.put(:birthday, birthday) + +      changeset = User.register_changeset(%User{}, params) + +      assert changeset.valid? +    end + +    test "it fails when birth date is not provided" do +      changeset = User.register_changeset(%User{}, @full_user_data) + +      refute changeset.valid? +    end + +    test "it fails when provided invalid birth date" do +      today = Date.utc_today() +      birthday = Date.add(today, -17 * 365) + +      params = +        @full_user_data +        |> Map.put(:birthday, birthday) + +      changeset = User.register_changeset(%User{}, params) + +      refute changeset.valid? +    end +  end +    describe "get_or_fetch/1" do      test "gets an existing user by nickname" do        user = insert(:user) diff --git a/test/pleroma/web/activity_pub/activity_pub_test.exs b/test/pleroma/web/activity_pub/activity_pub_test.exs index 3d152b4d0..9789d7704 100644 --- a/test/pleroma/web/activity_pub/activity_pub_test.exs +++ b/test/pleroma/web/activity_pub/activity_pub_test.exs @@ -389,6 +389,26 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do        assert %{data: %{"id" => ^object_url}} = Object.get_by_ap_id(object_url)      end + +    test "fetches user birthday information from misskey" do +      user_id = "https://misskey.io/@mkljczk" + +      Tesla.Mock.mock(fn +        %{ +          method: :get, +          url: ^user_id +        } -> +          %Tesla.Env{ +            status: 200, +            body: File.read!("test/fixtures/birthdays/misskey-user.json"), +            headers: [{"content-type", "application/activity+json"}] +          } +      end) + +      {:ok, user} = ActivityPub.make_user_from_ap_id(user_id) + +      assert user.birthday == ~D[2001-02-12] +    end    end    test "it fetches the appropriate tag-restricted posts" do diff --git a/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs index 9b07cd5c2..f272ed1ae 100644 --- a/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs @@ -1608,6 +1608,60 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      end    end +  describe "create account with required birth date" do +    setup %{conn: conn} do +      clear_config([:instance, :birthday_required], true) +      clear_config([:instance, :birthday_min_age], 18 * 365) + +      app_token = insert(:oauth_token, user: nil) + +      conn = +        conn +        |> put_req_header("authorization", "Bearer " <> app_token.token) +        |> put_req_header("content-type", "multipart/form-data") + +      [conn: conn] +    end + +    test "creates an account if provided valid birth date", %{conn: conn} do +      birthday = +        Date.utc_today() +        |> Date.add(-19 * 365) +        |> Date.to_string() + +      params = %{ +        username: "mkljczk", +        email: "mkljczk@example.org", +        password: "dupa.8", +        agreement: true, +        birthday: birthday +      } + +      res = +        conn +        |> post("/api/v1/accounts", params) + +      assert json_response_and_validate_schema(res, 200) +    end + +    test "returns an error if missing birth date", %{conn: conn} do +      params = %{ +        username: "mkljczk", +        email: "mkljczk@example.org", +        password: "dupa.8", +        agreement: true +      } + +      res = +        conn +        |> post("/api/v1/accounts", params) + +      assert json_response_and_validate_schema(res, 400) == %{ +               "error" => "{\"birthday\":[\"can't be blank\"]}" +             } +    end +  end +    describe "GET /api/v1/accounts/:id/lists - account_lists" do      test "returns lists to which the account belongs" do        %{user: user, conn: conn} = oauth_access(["read:lists"]) diff --git a/test/pleroma/web/mastodon_api/update_credentials_test.exs b/test/pleroma/web/mastodon_api/update_credentials_test.exs index 1d2027899..f0618885a 100644 --- a/test/pleroma/web/mastodon_api/update_credentials_test.exs +++ b/test/pleroma/web/mastodon_api/update_credentials_test.exs @@ -370,6 +370,26 @@ defmodule Pleroma.Web.MastodonAPI.UpdateCredentialsTest do               ]      end +    test "updates birth date", %{conn: conn} do +      res = +        patch(conn, "/api/v1/accounts/update_credentials", %{ +          "birthday" => "2001-02-12" +        }) + +      assert user_data = json_response_and_validate_schema(res, 200) +      assert user_data["pleroma"]["birthday"] == "2001-02-12" +    end + +    test "updates the user's show_birthday status", %{conn: conn} do +      res = +        patch(conn, "/api/v1/accounts/update_credentials", %{ +          "show_birthday" => true +        }) + +      assert user_data = json_response_and_validate_schema(res, 200) +      assert user_data["source"]["pleroma"]["show_birthday"] == true +    end +      test "emojis in fields labels", %{conn: conn} do        fields = [          %{"name" => ":firefox:", "value" => "is best 2hu"}, diff --git a/test/pleroma/web/mastodon_api/views/account_view_test.exs b/test/pleroma/web/mastodon_api/views/account_view_test.exs index c23ffb966..9fc56f7f0 100644 --- a/test/pleroma/web/mastodon_api/views/account_view_test.exs +++ b/test/pleroma/web/mastodon_api/views/account_view_test.exs @@ -494,6 +494,40 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do      end    end +  describe "hiding birthday" do +    test "doesn't show birthday if hidden" do +      user = +        insert(:user, %{ +          birthday: "2001-02-12", +          show_birthday: false +        }) + +      other_user = insert(:user) + +      user = User.get_cached_by_ap_id(user.ap_id) + +      assert AccountView.render( +               "show.json", +               %{user: user, for: other_user} +             )[:birthday] == nil +    end + +    test "shows hidden birthday to the account owner" do +      user = +        insert(:user, %{ +          birthday: "2001-02-12", +          show_birthday: false +        }) + +      user = User.get_cached_by_ap_id(user.ap_id) + +      assert AccountView.render( +               "show.json", +               %{user: user, for: user} +             )[:birthday] == nil +    end +  end +    describe "follow requests counter" do      test "shows zero when no follow requests are pending" do        user = insert(:user) diff --git a/test/pleroma/web/pleroma_api/controllers/account_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/account_controller_test.exs index d9aa8ce55..15682e40a 100644 --- a/test/pleroma/web/pleroma_api/controllers/account_controller_test.exs +++ b/test/pleroma/web/pleroma_api/controllers/account_controller_test.exs @@ -304,4 +304,59 @@ defmodule Pleroma.Web.PleromaAPI.AccountControllerTest do        assert json_response_and_validate_schema(conn, 404) == %{"error" => "Record not found"}      end    end + +  describe "birthday reminders" do +    test "returns a list of friends having birthday on specified day" do +      %{user: user, conn: conn} = oauth_access(["read:accounts"]) + +      %{id: id1} = +        user1 = +        insert(:user, %{ +          birthday: "2001-02-12", +          show_birthday: true +        }) + +      user2 = +        insert(:user, %{ +          birthday: "2001-02-14", +          show_birthday: true +        }) + +      user3 = insert(:user) + +      CommonAPI.follow(user, user1) +      CommonAPI.follow(user, user2) +      CommonAPI.follow(user, user3) + +      [%{"id" => ^id1}] = +        conn +        |> get("/api/v1/pleroma/birthdays?day=12&month=2") +        |> json_response_and_validate_schema(:ok) +    end + +    test "the list doesn't list friends with hidden birth date" do +      %{user: user, conn: conn} = oauth_access(["read:accounts"]) + +      user1 = +        insert(:user, %{ +          birthday: "2001-02-12", +          show_birthday: false +        }) + +      %{id: id2} = +        user2 = +        insert(:user, %{ +          birthday: "2001-02-12", +          show_birthday: true +        }) + +      CommonAPI.follow(user, user1) +      CommonAPI.follow(user, user2) + +      [%{"id" => ^id2}] = +        conn +        |> get("/api/v1/pleroma/birthdays?day=12&month=2") +        |> json_response_and_validate_schema(:ok) +    end +  end  end | 
