Skip to content

Commit 4cb644c

Browse files
committed
added integration tests for publisher client
1 parent e3d9726 commit 4cb644c

File tree

1 file changed

+186
-0
lines changed

1 file changed

+186
-0
lines changed

tests/publisher_tests.py

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
import os
2+
import unittest
3+
4+
from uid2_client import Uid2PublisherClient
5+
from uid2_client import TokenGenerateInput
6+
from uid2_client import TokenGenerateResponse
7+
from uid2_client.identity_tokens import IdentityTokens
8+
from urllib.request import HTTPError
9+
10+
class PublisherIntegrationTests(unittest.TestCase):
11+
12+
UID2_SECRET_KEY = None
13+
UID2_API_KEY = None
14+
UID2_BASE_URL = None
15+
publisher_client = None
16+
17+
@classmethod
18+
def setUpClass(cls):
19+
cls.UID2_BASE_URL = os.getenv("UID2_BASE_URL", "http://localhost:8080")
20+
cls.UID2_API_KEY = os.getenv("UID2_API_KEY", "trusted-partner-key")
21+
cls.UID2_SECRET_KEY = os.getenv("UID2_SECRET_KEY", "wJ0hP19QU4hmpB64Y3fV2dAed8t/mupw3sjN5jNRFzg=")
22+
23+
print(cls.UID2_BASE_URL, cls.UID2_API_KEY, cls.UID2_SECRET_KEY)
24+
25+
if cls.UID2_BASE_URL and cls.UID2_API_KEY and cls.UID2_SECRET_KEY:
26+
cls.publisher_client = Uid2PublisherClient(cls.UID2_BASE_URL, cls.UID2_API_KEY, cls.UID2_SECRET_KEY)
27+
28+
# Test methods
29+
def test_integration_generate_and_refresh(self):
30+
31+
token_generate_response = self.publisher_client.generate_token(
32+
TokenGenerateInput.from_email("[email protected]"))
33+
34+
self.assertFalse(token_generate_response.is_optout())
35+
36+
identity = token_generate_response.get_identity()
37+
self.assertIsNotNone(identity)
38+
self.assertFalse(identity.is_due_for_refresh())
39+
self.assertIsNotNone(identity.get_advertising_token())
40+
self.assertIsNotNone(identity.get_refresh_token())
41+
self.assertIsNotNone(identity.get_json_string())
42+
self.assertTrue(identity.is_refreshable())
43+
44+
token_refresh_response = self.publisher_client.refresh_token(identity)
45+
self.assertTrue(token_refresh_response.is_success())
46+
self.assertFalse(token_refresh_response.is_optout())
47+
self.assertIsNotNone(token_refresh_response.get_identity_json_string())
48+
49+
refreshed_identity = token_refresh_response.get_identity()
50+
self.assertIsNotNone(refreshed_identity)
51+
self.assertFalse(refreshed_identity.is_due_for_refresh())
52+
self.assertIsNotNone(refreshed_identity.get_advertising_token())
53+
self.assertIsNotNone(refreshed_identity.get_refresh_token())
54+
self.assertIsNotNone(refreshed_identity.get_json_string())
55+
self.assertTrue(identity.is_refreshable())
56+
57+
def test_integration_optout(self):
58+
59+
token_generate_response = self.publisher_client.generate_token(TokenGenerateInput.from_email("[email protected]"))
60+
61+
self.assertFalse(token_generate_response.is_optout())
62+
63+
identity = token_generate_response.get_identity()
64+
self.assertIsNotNone(identity)
65+
self.assertFalse(identity.is_due_for_refresh())
66+
self.assertIsNotNone(identity.get_advertising_token())
67+
self.assertIsNotNone(identity.get_refresh_token())
68+
self.assertIsNotNone(identity.get_json_string())
69+
self.assertTrue(identity.is_refreshable())
70+
71+
token_refresh_response = self.publisher_client.refresh_token(identity)
72+
self.assertFalse(token_refresh_response.is_success())
73+
self.assertTrue(token_refresh_response.is_optout())
74+
self.assertIsNone(token_refresh_response.get_identity_json_string())
75+
self.assertIsNone(token_refresh_response.get_identity())
76+
77+
def test_integration_phone(self):
78+
79+
token_generate_response = self.publisher_client.generate_token(
80+
TokenGenerateInput.from_phone("+12345678901"))
81+
82+
self.assertFalse(token_generate_response.is_optout())
83+
identity = token_generate_response.get_identity()
84+
self.assertIsNotNone(identity)
85+
self.assertFalse(identity.is_due_for_refresh())
86+
self.assertIsNotNone(identity.get_advertising_token())
87+
self.assertIsNotNone(identity.get_refresh_token())
88+
self.assertIsNotNone(identity.get_json_string())
89+
self.assertTrue(identity.is_refreshable())
90+
91+
token_refresh_response = self.publisher_client.refresh_token(identity)
92+
self.assertTrue(token_refresh_response.is_success())
93+
self.assertFalse(token_refresh_response.is_optout())
94+
self.assertIsNotNone(token_refresh_response.get_identity_json_string())
95+
96+
refreshed_identity = token_refresh_response.get_identity()
97+
self.assertIsNotNone(refreshed_identity)
98+
self.assertFalse(refreshed_identity.is_due_for_refresh())
99+
self.assertIsNotNone(refreshed_identity.get_advertising_token())
100+
self.assertIsNotNone(refreshed_identity.get_refresh_token())
101+
self.assertIsNotNone(refreshed_identity.get_json_string())
102+
self.assertTrue(identity.is_refreshable())
103+
104+
def test_integration_bad_requests(self):
105+
106+
with self.assertRaises(ValueError):
107+
self.publisher_client.generate_token(TokenGenerateInput.from_email("this is not an email address"))
108+
109+
with self.assertRaises(ValueError):
110+
self.publisher_client.generate_token(TokenGenerateInput.from_phone("this is not a phone number"))
111+
112+
unnormalized_phone_number = " +123 44 55-66-77"
113+
with self.assertRaises(ValueError):
114+
self.publisher_client.generate_token(TokenGenerateInput.from_phone(unnormalized_phone_number))
115+
116+
expired_respose = "{\"advertising_token\":\"AgAAAAN6QZRCFTau+sfOlMMUY2ftElFMq2TCrcu1EAaD9WmEfoT2BWm2ZKz1tumbT00tWLffRDQ/9POXfA0O/Ljszn7FLtG5EzTBM3HYs4f5irkqeEvu38DhVCxUEpI+gZZZkynRap1oYx6AmC/ip3rk+7pmqa3r3saDs1mPRSSTm+Nh6A==\",\"user_token\":\"AgAAAAL6aleYI4BubI5ZXMBshqmMEfCkbCJF4fLeg1sdI0BTLzj9sXsSISjkG0lMC743diC2NVy3ElkbO1lLysd+Lm6alkqevPrcuWDisQ1939YdoH6LqpwBH3FNSE4/xa3Q+94=\",\"refresh_token\":\"AAAAAARomrP3NjjH+8mt5djfTHbmRZXjOMnAN8WpjJoe30AhUCvYksO/xoDSj77GzWv4M99DhnPl2cVco8CZFTcE10nauXI4Barr890ILnH0IIacOei5Zjwh6DycFkoXkAAuHY1zjmxb7niGLfSP2RctWkZdRVGWQv/UW/grw6+paU9bnKEWPzVvLwwdW2NgjDKu+szE6A+b5hkY+I3voKoaz8/kLDmX8ddJGLy/YOh/LIveBspSAvEg+v89OuUCwAqm8L3Rt8PxDzDnt0U4Na+AUawvvfsIhmsn/zMpRRks6GHhIAB/EQUHID8TedU8Hv1WFRsiraG9Dfn1Kc5/uYnDJhEagWc+7RgTGT+U5GqI6+afrAl5091eBLbmvXnXn9ts\",\"identity_expires\":1668059799628,\"refresh_expires\":1668142599628,\"refresh_from\":1668056202628,\"refresh_response_key\":\"P941vVeuyjaDRVnFQ8DPd0AZnW4bPeiJPXER2K9QXcU=\"}"
117+
current_identity = IdentityTokens.from_json_string(expired_respose)
118+
with self.assertRaises(HTTPError):
119+
self.publisher_client.refresh_token(current_identity)
120+
121+
with self.assertRaises(TypeError):
122+
self.publisher_client.generate_token(TokenGenerateInput.from_email(None))
123+
124+
with self.assertRaises(AttributeError):
125+
self.publisher_client.refresh_token(None)
126+
127+
bad_url_client = Uid2PublisherClient("https://www.something.com", self.UID2_API_KEY, self.UID2_SECRET_KEY)
128+
with self.assertRaises(HTTPError):
129+
bad_url_client.generate_token(TokenGenerateInput.from_email("[email protected]"))
130+
131+
bad_secret_client = Uid2PublisherClient(self.UID2_BASE_URL, self.UID2_API_KEY, "badSecretKeypB64Y3fV2dAed8t/mupw3sjN5jNRFzg=")
132+
with self.assertRaises(HTTPError):
133+
bad_secret_client.generate_token(TokenGenerateInput.from_email("[email protected]"))
134+
135+
bad_api_client = Uid2PublisherClient(self.UID2_BASE_URL, "not-real-key", self.UID2_SECRET_KEY)
136+
with self.assertRaises(HTTPError):
137+
bad_secret_client.generate_token(TokenGenerateInput.from_email("[email protected]"))
138+
139+
def test_integration_tc_string(self):
140+
EUID_BASE_URL = os.getenv("EUID_BASE_URL", "http://localhost:8080");
141+
EUID_API_KEY = os.getenv("EUID_API_KEY", "trusted-partner-key");
142+
EUID_SECRET_KEY = os.getenv("EUID_SECRET_KEY", "wJ0hP19QU4hmpB64Y3fV2dAed8t/mupw3sjN5jNRFzg=");
143+
144+
publisher_client = Uid2PublisherClient(EUID_BASE_URL, EUID_API_KEY, EUID_SECRET_KEY)
145+
tc_string = "CPhJRpMPhJRpMABAMBFRACBoALAAAEJAAIYgAKwAQAKgArABAAqAAA"
146+
147+
token_generate_response = publisher_client.generate_token(TokenGenerateInput.from_email("[email protected]").with_transparency_and_consent_string(tc_string))
148+
self.assertFalse(token_generate_response.is_optout())
149+
identity = token_generate_response.get_identity()
150+
self.assertIsNotNone(identity)
151+
self.assertFalse(identity.is_due_for_refresh())
152+
self.assertIsNotNone(identity.get_advertising_token())
153+
self.assertIsNotNone(identity.get_refresh_token())
154+
self.assertIsNotNone(identity.get_json_string())
155+
self.assertTrue(identity.is_refreshable())
156+
157+
158+
159+
def test_integration_tc_string_with_insufficient_consent(self):
160+
EUID_BASE_URL = os.getenv("EUID_BASE_URL", "http://localhost:8080");
161+
EUID_API_KEY = os.getenv("EUID_API_KEY", "trusted-partner-key");
162+
EUID_SECRET_KEY = os.getenv("EUID_SECRET_KEY", "wJ0hP19QU4hmpB64Y3fV2dAed8t/mupw3sjN5jNRFzg=");
163+
164+
publisher_client = Uid2PublisherClient(EUID_BASE_URL, EUID_API_KEY, EUID_SECRET_KEY)
165+
tc_string = "CPehXK9PehXK9ABAMBFRACBoADAAAEJAAIYgAKwAQAKgArABAAqAAA"
166+
with self.assertRaises(ValueError):
167+
publisher_client.generate_token(TokenGenerateInput.from_email("[email protected]").with_transparency_and_consent_string(tc_string))
168+
169+
def test_integration_optout_generate_token(self):
170+
EUID_BASE_URL = os.getenv("EUID_BASE_URL", "http://localhost:8080");
171+
EUID_API_KEY = os.getenv("EUID_API_KEY", "trusted-partner-key");
172+
EUID_SECRET_KEY = os.getenv("EUID_SECRET_KEY", "wJ0hP19QU4hmpB64Y3fV2dAed8t/mupw3sjN5jNRFzg=");
173+
174+
publisher_client = Uid2PublisherClient(EUID_BASE_URL, EUID_API_KEY, EUID_SECRET_KEY)
175+
tc_string = "CPhJRpMPhJRpMABAMBFRACBoALAAAEJAAIYgAKwAQAKgArABAAqAAA"
176+
input = TokenGenerateInput.from_email("[email protected]").do_not_generate_tokens_for_opted_out().with_transparency_and_consent_string(tc_string)
177+
token_generate_response = publisher_client.generate_token(input)
178+
self.assertTrue(token_generate_response.is_optout())
179+
self.assertFalse(token_generate_response.is_success())
180+
self.assertIsNone(token_generate_response.get_identity())
181+
182+
183+
184+
185+
if __name__ == '__main__':
186+
unittest.main()

0 commit comments

Comments
 (0)