|
1 | 1 | from integration_tests.utils import populate_mock_db
|
| 2 | +from src.models.tracks.track import Track |
2 | 3 | from src.premium_content.premium_content_access_checker import (
|
3 | 4 | PremiumContentAccessChecker,
|
4 | 5 | )
|
5 | 6 | from src.utils.db_session import get_db_read_replica
|
6 | 7 |
|
7 | 8 |
|
8 |
| -def test_track_access(app): |
| 9 | +def test_access(app): |
| 10 | + non_premium_track_entity = { |
| 11 | + "track_id": 1, |
| 12 | + "owner_id": 3, |
| 13 | + "is_premium": False, |
| 14 | + "premium_conditions": None, |
| 15 | + } |
| 16 | + premium_track_entity_1 = { |
| 17 | + "track_id": 2, |
| 18 | + "owner_id": 3, |
| 19 | + "is_premium": True, |
| 20 | + "premium_conditions": {"nft-collection": "some-nft-collection"}, |
| 21 | + } |
| 22 | + premium_track_entity_2 = { |
| 23 | + "track_id": 3, |
| 24 | + "owner_id": 2, |
| 25 | + "is_premium": True, |
| 26 | + "premium_conditions": {"nft-collection": "some-nft-collection"}, |
| 27 | + } |
| 28 | + track_entities = [ |
| 29 | + non_premium_track_entity, |
| 30 | + premium_track_entity_1, |
| 31 | + premium_track_entity_2, |
| 32 | + ] |
| 33 | + tracks = [] |
| 34 | + for entity in track_entities: |
| 35 | + tracks.append( |
| 36 | + Track( |
| 37 | + blockhash=hex(0), |
| 38 | + blocknumber=0, |
| 39 | + txhash=str(0), |
| 40 | + track_id=entity.get("track_id"), |
| 41 | + owner_id=entity.get("owner_id", 1), |
| 42 | + is_premium=entity.get("is_premium", False), |
| 43 | + premium_conditions=entity.get("premium_conditions", None), |
| 44 | + is_current=True, |
| 45 | + is_delete=False, |
| 46 | + ) |
| 47 | + ) |
| 48 | + |
| 49 | + premium_content_access_checker = PremiumContentAccessChecker() |
| 50 | + |
| 51 | + # test non-premium content |
| 52 | + result = premium_content_access_checker.check_access( |
| 53 | + user_id=1, |
| 54 | + premium_content_id=non_premium_track_entity["track_id"], |
| 55 | + premium_content_type="track", |
| 56 | + premium_content_entity=tracks[0], |
| 57 | + ) |
| 58 | + assert not result["is_premium"] and result["does_user_have_access"] |
| 59 | + |
| 60 | + # test premium content with user who has access |
| 61 | + result = premium_content_access_checker.check_access( |
| 62 | + user_id=2, |
| 63 | + premium_content_id=premium_track_entity_1["track_id"], |
| 64 | + premium_content_type="track", |
| 65 | + premium_content_entity=tracks[1], |
| 66 | + ) |
| 67 | + assert result["is_premium"] and result["does_user_have_access"] |
| 68 | + |
| 69 | + # test premium content with user who owns the track |
| 70 | + result = premium_content_access_checker.check_access( |
| 71 | + user_id=2, |
| 72 | + premium_content_id=premium_track_entity_2["track_id"], |
| 73 | + premium_content_type="track", |
| 74 | + premium_content_entity=tracks[2], |
| 75 | + ) |
| 76 | + assert result["is_premium"] and result["does_user_have_access"] |
| 77 | + |
| 78 | + # todo: test premium content with user who has no access |
| 79 | + # after we implement nft infexing |
| 80 | + |
| 81 | + |
| 82 | +def test_batch_access(app): |
9 | 83 | with app.app_context():
|
10 | 84 | db = get_db_read_replica()
|
11 | 85 |
|
12 | 86 | user_entity_1 = {"user_id": 1}
|
13 | 87 | user_entity_2 = {"user_id": 2}
|
14 |
| - user_entities = [user_entity_1, user_entity_2] |
| 88 | + user_entity_3 = {"user_id": 3} |
| 89 | + user_entities = [user_entity_1, user_entity_2, user_entity_3] |
| 90 | + |
| 91 | + non_exisent_track_id = 1 |
15 | 92 |
|
16 | 93 | non_premium_track_entity = {
|
17 |
| - "track_id": 1, |
| 94 | + "track_id": 2, |
18 | 95 | "is_premium": False,
|
19 | 96 | "premium_conditions": None,
|
20 | 97 | }
|
21 |
| - premium_track_entity = { |
22 |
| - "track_id": 2, |
| 98 | + premium_track_entity_1 = { |
| 99 | + "track_id": 3, |
| 100 | + "is_premium": True, |
| 101 | + "premium_conditions": {"nft-collection": "some-nft-collection"}, |
| 102 | + } |
| 103 | + premium_track_entity_2 = { |
| 104 | + "track_id": 4, |
| 105 | + "owner_id": user_entity_3["user_id"], |
23 | 106 | "is_premium": True,
|
24 | 107 | "premium_conditions": {"nft-collection": "some-nft-collection"},
|
25 | 108 | }
|
26 |
| - track_entities = [non_premium_track_entity, premium_track_entity] |
| 109 | + track_entities = [ |
| 110 | + non_premium_track_entity, |
| 111 | + premium_track_entity_1, |
| 112 | + premium_track_entity_2, |
| 113 | + ] |
27 | 114 |
|
28 | 115 | entities = {"users": user_entities, "tracks": track_entities}
|
29 | 116 |
|
30 | 117 | populate_mock_db(db, entities)
|
31 | 118 |
|
32 | 119 | premium_content_access_checker = PremiumContentAccessChecker()
|
33 | 120 |
|
34 |
| - non_exisent_track_id = 3 |
35 |
| - |
36 |
| - result = premium_content_access_checker.check_access_for_batch( |
37 |
| - [ |
38 |
| - { |
39 |
| - "user_id": user_entity_1["user_id"], |
40 |
| - "premium_content_id": non_exisent_track_id, |
41 |
| - "premium_content_type": "track", |
42 |
| - }, |
43 |
| - { |
44 |
| - "user_id": user_entity_2["user_id"], |
45 |
| - "premium_content_id": non_premium_track_entity["track_id"], |
46 |
| - "premium_content_type": "track", |
47 |
| - }, |
48 |
| - { |
49 |
| - "user_id": user_entity_2["user_id"], |
50 |
| - "premium_content_id": premium_track_entity["track_id"], |
51 |
| - "premium_content_type": "track", |
52 |
| - }, |
53 |
| - ] |
54 |
| - ) |
| 121 | + with db.scoped_session() as session: |
| 122 | + result = premium_content_access_checker.check_access_for_batch( |
| 123 | + session, |
| 124 | + [ |
| 125 | + { |
| 126 | + "user_id": user_entity_1["user_id"], |
| 127 | + "premium_content_id": non_exisent_track_id, |
| 128 | + "premium_content_type": "track", |
| 129 | + }, |
| 130 | + { |
| 131 | + "user_id": user_entity_2["user_id"], |
| 132 | + "premium_content_id": non_premium_track_entity["track_id"], |
| 133 | + "premium_content_type": "track", |
| 134 | + }, |
| 135 | + { |
| 136 | + "user_id": user_entity_2["user_id"], |
| 137 | + "premium_content_id": premium_track_entity_1["track_id"], |
| 138 | + "premium_content_type": "track", |
| 139 | + }, |
| 140 | + { |
| 141 | + "user_id": user_entity_3["user_id"], |
| 142 | + "premium_content_id": premium_track_entity_2["track_id"], |
| 143 | + "premium_content_type": "track", |
| 144 | + }, |
| 145 | + ], |
| 146 | + ) |
55 | 147 |
|
56 |
| - track_access_result = result["track"] |
| 148 | + track_access_result = result["track"] |
57 | 149 |
|
58 |
| - # test non-existent track |
59 |
| - assert user_entity_1["user_id"] not in track_access_result |
| 150 | + # test non-existent track |
| 151 | + assert user_entity_1["user_id"] not in track_access_result |
60 | 152 |
|
61 |
| - # test non-premium track |
62 |
| - user_2_non_premium_track_access_result = track_access_result[ |
63 |
| - user_entity_2["user_id"] |
64 |
| - ][non_premium_track_entity["track_id"]] |
65 |
| - assert ( |
66 |
| - not user_2_non_premium_track_access_result["is_premium"] |
67 |
| - and user_2_non_premium_track_access_result["does_user_have_access"] |
68 |
| - ) |
| 153 | + # test non-premium track |
| 154 | + user_2_non_premium_track_access_result = track_access_result[ |
| 155 | + user_entity_2["user_id"] |
| 156 | + ][non_premium_track_entity["track_id"]] |
| 157 | + assert ( |
| 158 | + not user_2_non_premium_track_access_result["is_premium"] |
| 159 | + and user_2_non_premium_track_access_result["does_user_have_access"] |
| 160 | + ) |
69 | 161 |
|
70 |
| - # test premium track with user who has access |
71 |
| - user_2_premium_track_access_result = track_access_result[ |
72 |
| - user_entity_2["user_id"] |
73 |
| - ][premium_track_entity["track_id"]] |
74 |
| - assert ( |
75 |
| - user_2_premium_track_access_result["is_premium"] |
76 |
| - and user_2_premium_track_access_result["does_user_have_access"] |
77 |
| - ) |
| 162 | + # test premium track with user who has access |
| 163 | + user_2_premium_track_access_result = track_access_result[ |
| 164 | + user_entity_2["user_id"] |
| 165 | + ][premium_track_entity_1["track_id"]] |
| 166 | + assert ( |
| 167 | + user_2_premium_track_access_result["is_premium"] |
| 168 | + and user_2_premium_track_access_result["does_user_have_access"] |
| 169 | + ) |
| 170 | + |
| 171 | + # test premium track with user who owns the track |
| 172 | + user_3_premium_track_access_result = track_access_result[ |
| 173 | + user_entity_3["user_id"] |
| 174 | + ][premium_track_entity_2["track_id"]] |
| 175 | + assert ( |
| 176 | + user_3_premium_track_access_result["is_premium"] |
| 177 | + and user_3_premium_track_access_result["does_user_have_access"] |
| 178 | + ) |
78 | 179 |
|
79 |
| - # todo: test premium track with user who has no access |
80 |
| - # after we implement nft infexing |
| 180 | + # todo: test premium track with user who has no access |
| 181 | + # after we implement nft infexing |
0 commit comments