Auto-indexing service and GraphQL API for AT Protocol Records quickslice.slices.network/
atproto gleam graphql
at main 185 lines 6.4 kB view raw
1/// Integration tests for label preferences 2/// 3/// Tests the label preference system including: 4/// - Setting label preferences 5/// - Getting label preferences for a user 6/// - Non-system label filtering 7/// - Validation of visibility values 8import database/repositories/label_definitions 9import database/repositories/label_preferences 10import gleam/list 11import gleam/option 12import gleam/string 13import gleeunit/should 14import test_helpers 15 16// ============================================================================= 17// Label Definitions Repository Tests (with default_visibility) 18// ============================================================================= 19 20pub fn label_definitions_get_includes_default_visibility_test() { 21 let assert Ok(db) = test_helpers.create_test_db() 22 let assert Ok(_) = test_helpers.create_moderation_tables(db) 23 24 // Get a label definition 25 let assert Ok(option.Some(def)) = label_definitions.get(db, "spam") 26 27 // Should have default_visibility field 28 def.val |> should.equal("spam") 29 def.default_visibility |> should.equal("warn") 30} 31 32pub fn label_definitions_get_non_system_excludes_system_labels_test() { 33 let assert Ok(db) = test_helpers.create_test_db() 34 let assert Ok(_) = test_helpers.create_moderation_tables(db) 35 36 // Get non-system labels 37 let assert Ok(defs) = label_definitions.get_non_system(db) 38 39 // Should have at least some labels 40 list.length(defs) |> should.not_equal(0) 41 42 // None should start with ! 43 list.all(defs, fn(def) { !string.starts_with(def.val, "!") }) 44 |> should.be_true() 45} 46 47pub fn label_definitions_get_non_system_includes_content_labels_test() { 48 let assert Ok(db) = test_helpers.create_test_db() 49 let assert Ok(_) = test_helpers.create_moderation_tables(db) 50 51 // Get non-system labels 52 let assert Ok(defs) = label_definitions.get_non_system(db) 53 54 // Should include porn, spam, etc. 55 let vals = list.map(defs, fn(d) { d.val }) 56 57 vals |> list.contains("porn") |> should.be_true() 58 vals |> list.contains("spam") |> should.be_true() 59 vals |> list.contains("sexual") |> should.be_true() 60 vals |> list.contains("nudity") |> should.be_true() 61} 62 63// ============================================================================= 64// Label Preferences Repository Tests 65// ============================================================================= 66 67pub fn label_preferences_set_and_get_test() { 68 let assert Ok(db) = test_helpers.create_test_db() 69 let assert Ok(_) = test_helpers.create_moderation_tables(db) 70 71 let did = "did:plc:user123" 72 let label_val = "spam" 73 let visibility = "hide" 74 75 // Set a preference 76 let assert Ok(pref) = label_preferences.set(db, did, label_val, visibility) 77 78 pref.did |> should.equal(did) 79 pref.label_val |> should.equal(label_val) 80 pref.visibility |> should.equal(visibility) 81 82 // Get the preference 83 let assert Ok(option.Some(found)) = label_preferences.get(db, did, label_val) 84 85 found.visibility |> should.equal(visibility) 86} 87 88pub fn label_preferences_get_by_did_returns_all_user_prefs_test() { 89 let assert Ok(db) = test_helpers.create_test_db() 90 let assert Ok(_) = test_helpers.create_moderation_tables(db) 91 92 let did = "did:plc:user123" 93 94 // Set multiple preferences 95 let assert Ok(_) = label_preferences.set(db, did, "spam", "hide") 96 let assert Ok(_) = label_preferences.set(db, did, "porn", "warn") 97 let assert Ok(_) = label_preferences.set(db, did, "nudity", "ignore") 98 99 // Get all preferences for user 100 let assert Ok(prefs) = label_preferences.get_by_did(db, did) 101 102 prefs |> list.length() |> should.equal(3) 103 104 // Verify each preference exists 105 let vals = list.map(prefs, fn(p) { p.label_val }) 106 vals |> list.contains("spam") |> should.be_true() 107 vals |> list.contains("porn") |> should.be_true() 108 vals |> list.contains("nudity") |> should.be_true() 109} 110 111pub fn label_preferences_set_updates_existing_test() { 112 let assert Ok(db) = test_helpers.create_test_db() 113 let assert Ok(_) = test_helpers.create_moderation_tables(db) 114 115 let did = "did:plc:user123" 116 let label_val = "spam" 117 118 // Set initial preference 119 let assert Ok(_) = label_preferences.set(db, did, label_val, "warn") 120 121 // Update preference 122 let assert Ok(updated) = label_preferences.set(db, did, label_val, "hide") 123 124 updated.visibility |> should.equal("hide") 125 126 // Verify only one preference exists 127 let assert Ok(prefs) = label_preferences.get_by_did(db, did) 128 prefs |> list.length() |> should.equal(1) 129} 130 131pub fn label_preferences_delete_removes_preference_test() { 132 let assert Ok(db) = test_helpers.create_test_db() 133 let assert Ok(_) = test_helpers.create_moderation_tables(db) 134 135 let did = "did:plc:user123" 136 let label_val = "spam" 137 138 // Set a preference 139 let assert Ok(_) = label_preferences.set(db, did, label_val, "hide") 140 141 // Delete the preference 142 let assert Ok(_) = label_preferences.delete(db, did, label_val) 143 144 // Should no longer exist 145 let assert Ok(option.None) = label_preferences.get(db, did, label_val) 146} 147 148pub fn label_preferences_different_users_have_separate_prefs_test() { 149 let assert Ok(db) = test_helpers.create_test_db() 150 let assert Ok(_) = test_helpers.create_moderation_tables(db) 151 152 let user1 = "did:plc:user1" 153 let user2 = "did:plc:user2" 154 155 // Set different preferences for different users 156 let assert Ok(_) = label_preferences.set(db, user1, "spam", "hide") 157 let assert Ok(_) = label_preferences.set(db, user2, "spam", "warn") 158 159 // Get user1's preference 160 let assert Ok(option.Some(pref1)) = label_preferences.get(db, user1, "spam") 161 pref1.visibility |> should.equal("hide") 162 163 // Get user2's preference 164 let assert Ok(option.Some(pref2)) = label_preferences.get(db, user2, "spam") 165 pref2.visibility |> should.equal("warn") 166} 167 168pub fn label_preferences_get_returns_none_when_not_set_test() { 169 let assert Ok(db) = test_helpers.create_test_db() 170 let assert Ok(_) = test_helpers.create_moderation_tables(db) 171 172 // Get a preference that doesn't exist 173 let assert Ok(option.None) = 174 label_preferences.get(db, "did:plc:user123", "spam") 175} 176 177pub fn label_preferences_get_by_did_returns_empty_for_new_user_test() { 178 let assert Ok(db) = test_helpers.create_test_db() 179 let assert Ok(_) = test_helpers.create_moderation_tables(db) 180 181 // Get preferences for a user with no preferences 182 let assert Ok(prefs) = label_preferences.get_by_did(db, "did:plc:newuser") 183 184 prefs |> list.length() |> should.equal(0) 185}