"""Per-user browse preferences: validation and merge semantics.""" import json from django.contrib.auth import get_user_model from django.test import Client, TestCase from rest_framework.authtoken.models import Token User = get_user_model() class PreferenceTests(TestCase): def setUp(self): self.user = User.objects.create_user( username="prefs-user", password="prefs-pass-123456" ) self.client = Client() self.client.defaults["HTTP_AUTHORIZATION"] = ( f"Token {Token.objects.create(user=self.user).key}" ) def post(self, payload): return self.client.post( "/api/auth/preferences/", data=json.dumps(payload), content_type="application/json", ) def test_e621_per_page_round_trips_within_range(self): response = self.post({"e621_per_page": 320}) self.assertEqual(response.status_code, 200) self.assertEqual(response.json()["e621_per_page"], 320) self.assertEqual( self.client.get("/api/auth/me/").json()["preferences"]["e621_per_page"], 320, ) def test_e621_per_page_rejects_out_of_range(self): for value in (0, 8, 321, 1000): self.assertEqual(self.post({"e621_per_page": value}).status_code, 400, value) def test_merge_keeps_other_keys(self): self.post({"ratings": ["s"], "e621_per_page": 100}) response = self.post({"per_page": 24}) data = response.json() self.assertEqual(data["ratings"], ["s"]) self.assertEqual(data["e621_per_page"], 100) self.assertEqual(data["per_page"], 24)