about summary refs log tree commit diff
path: root/__e2e__
diff options
context:
space:
mode:
authorPaul Frazee <pfrazee@gmail.com>2023-08-03 22:08:30 -0700
committerGitHub <noreply@github.com>2023-08-03 22:08:30 -0700
commitb154d3ea21bcca48594aa397420b0f6718dbf7f3 (patch)
tree31d51cd32cfeabc78d647cc068f5f84551f7a1b0 /__e2e__
parent3ae5a6b63134f6aa57eba4fba18e4ad136623e20 (diff)
downloadvoidsky-b154d3ea21bcca48594aa397420b0f6718dbf7f3.tar.zst
Labeling & moderation updates [DRAFT] (#1057)
* First pass moving to the new labeling sdk (it compiles)

* Correct behaviors around interpreting label moderation

* Improve moderation state rendering

* Improve hiders and alerts

* Improve handling of mutes

* Improve profile warnings

* Add profile blurring to profile header

* Add blocks to test cases

* Render labels on profile cards, do not filter

* Filter profiles from suggestions using moderation

* Apply profile blurring to ProfileCard

* Handle blocked and deleted quote posts

* Temporarily translate content filtering settings to new labels

* Fix types

* Tune ContentHider & PostHider click targets

* Put a warning on profilecard label pills

* Fix screenhider learnmore link on mobile

* Enforce no-override on user avatar

* Dont enumerate profile blur-media labels in alerts

* Fixes to muted posts (esp quotes of muted users)

* Fixes to account/profile warnings

* Bump @atproto/api@0.5.0

* Bump @atproto/api@0.5.1

* Fix tests

* 1.43

* Remove log

* Bump @atproto/api@0.5.2
Diffstat (limited to '__e2e__')
-rw-r--r--__e2e__/mock-server.ts211
-rw-r--r--__e2e__/tests/profile-screen.test.ts8
2 files changed, 175 insertions, 44 deletions
diff --git a/__e2e__/mock-server.ts b/__e2e__/mock-server.ts
index f553fc686..79c318571 100644
--- a/__e2e__/mock-server.ts
+++ b/__e2e__/mock-server.ts
@@ -75,26 +75,35 @@ async function main() {
           )
 
           for (const user of [
-            'csam-account',
-            'csam-profile',
-            'csam-posts',
+            'dmca-account',
+            'dmca-profile',
+            'dmca-posts',
             'porn-account',
             'porn-profile',
             'porn-posts',
             'nudity-account',
             'nudity-profile',
             'nudity-posts',
+            'scam-account',
+            'scam-profile',
+            'scam-posts',
             'unknown-account',
             'unknown-profile',
             'unknown-posts',
-            'always-filter-account',
-            'always-filter-profile',
-            'always-filter-posts',
-            'always-warn-account',
-            'always-warn-profile',
-            'always-warn-posts',
+            'hide-account',
+            'hide-profile',
+            'hide-posts',
+            'no-promote-account',
+            'no-promote-profile',
+            'no-promote-posts',
+            'warn-account',
+            'warn-profile',
+            'warn-posts',
             'muted-account',
             'muted-by-list-account',
+            'blocking-account',
+            'blockedby-account',
+            'mutual-block-account',
           ]) {
             await server.mocker.createUser(user)
             await server.mocker.follow('alice', user)
@@ -108,25 +117,25 @@ async function main() {
             await server.mocker.like(user, anchorPost)
           }
 
-          await server.mocker.labelAccount('csam', 'csam-account')
-          await server.mocker.labelProfile('csam', 'csam-profile')
+          await server.mocker.labelAccount('dmca-violation', 'dmca-account')
+          await server.mocker.labelProfile('dmca-violation', 'dmca-profile')
           await server.mocker.labelPost(
-            'csam',
-            await server.mocker.createPost('csam-posts', 'csam post'),
+            'dmca-violation',
+            await server.mocker.createPost('dmca-posts', 'dmca post'),
           )
           await server.mocker.labelPost(
-            'csam',
+            'dmca-violation',
             await server.mocker.createQuotePost(
-              'csam-posts',
-              'csam quote post',
+              'dmca-posts',
+              'dmca quote post',
               anchorPost,
             ),
           )
           await server.mocker.labelPost(
-            'csam',
+            'dmca-violation',
             await server.mocker.createReply(
-              'csam-posts',
-              'csam reply',
+              'dmca-posts',
+              'dmca reply',
               anchorPost,
             ),
           )
@@ -177,6 +186,29 @@ async function main() {
             ),
           )
 
+          await server.mocker.labelAccount('scam', 'scam-account')
+          await server.mocker.labelProfile('scam', 'scam-profile')
+          await server.mocker.labelPost(
+            'scam',
+            await server.mocker.createPost('scam-posts', 'scam post'),
+          )
+          await server.mocker.labelPost(
+            'scam',
+            await server.mocker.createQuotePost(
+              'scam-posts',
+              'scam quote post',
+              anchorPost,
+            ),
+          )
+          await server.mocker.labelPost(
+            'scam',
+            await server.mocker.createReply(
+              'scam-posts',
+              'scam reply',
+              anchorPost,
+            ),
+          )
+
           await server.mocker.labelAccount(
             'not-a-real-label',
             'unknown-account',
@@ -206,54 +238,74 @@ async function main() {
             ),
           )
 
-          await server.mocker.labelAccount('!filter', 'always-filter-account')
-          await server.mocker.labelProfile('!filter', 'always-filter-profile')
+          await server.mocker.labelAccount('!hide', 'hide-account')
+          await server.mocker.labelProfile('!hide', 'hide-profile')
+          await server.mocker.labelPost(
+            '!hide',
+            await server.mocker.createPost('hide-posts', 'hide post'),
+          )
           await server.mocker.labelPost(
-            '!filter',
+            '!hide',
+            await server.mocker.createQuotePost(
+              'hide-posts',
+              'hide quote post',
+              anchorPost,
+            ),
+          )
+          await server.mocker.labelPost(
+            '!hide',
+            await server.mocker.createReply(
+              'hide-posts',
+              'hide reply',
+              anchorPost,
+            ),
+          )
+
+          await server.mocker.labelAccount('!no-promote', 'no-promote-account')
+          await server.mocker.labelProfile('!no-promote', 'no-promote-profile')
+          await server.mocker.labelPost(
+            '!no-promote',
             await server.mocker.createPost(
-              'always-filter-posts',
-              'always-filter post',
+              'no-promote-posts',
+              'no-promote post',
             ),
           )
           await server.mocker.labelPost(
-            '!filter',
+            '!no-promote',
             await server.mocker.createQuotePost(
-              'always-filter-posts',
-              'always-filter quote post',
+              'no-promote-posts',
+              'no-promote quote post',
               anchorPost,
             ),
           )
           await server.mocker.labelPost(
-            '!filter',
+            '!no-promote',
             await server.mocker.createReply(
-              'always-filter-posts',
-              'always-filter reply',
+              'no-promote-posts',
+              'no-promote reply',
               anchorPost,
             ),
           )
 
-          await server.mocker.labelAccount('!warn', 'always-warn-account')
-          await server.mocker.labelProfile('!warn', 'always-warn-profile')
+          await server.mocker.labelAccount('!warn', 'warn-account')
+          await server.mocker.labelProfile('!warn', 'warn-profile')
           await server.mocker.labelPost(
             '!warn',
-            await server.mocker.createPost(
-              'always-warn-posts',
-              'always-warn post',
-            ),
+            await server.mocker.createPost('warn-posts', 'warn post'),
           )
           await server.mocker.labelPost(
             '!warn',
             await server.mocker.createQuotePost(
-              'always-warn-posts',
-              'always-warn quote post',
+              'warn-posts',
+              'warn quote post',
               anchorPost,
             ),
           )
           await server.mocker.labelPost(
             '!warn',
             await server.mocker.createReply(
-              'always-warn-posts',
-              'always-warn reply',
+              'warn-posts',
+              'warn reply',
               anchorPost,
             ),
           )
@@ -291,6 +343,85 @@ async function main() {
             'account reply',
             anchorPost,
           )
+
+          await server.mocker.createPost('blocking-account', 'blocking post')
+          await server.mocker.createQuotePost(
+            'blocking-account',
+            'blocking quote post',
+            anchorPost,
+          )
+          await server.mocker.createReply(
+            'blocking-account',
+            'blocking reply',
+            anchorPost,
+          )
+          await server.mocker.users.alice.agent.app.bsky.graph.block.create(
+            {
+              repo: server.mocker.users.alice.did,
+            },
+            {
+              subject: server.mocker.users['blocking-account'].did,
+              createdAt: new Date().toISOString(),
+            },
+          )
+
+          await server.mocker.createPost('blockedby-account', 'blockedby post')
+          await server.mocker.createQuotePost(
+            'blockedby-account',
+            'blockedby quote post',
+            anchorPost,
+          )
+          await server.mocker.createReply(
+            'blockedby-account',
+            'blockedby reply',
+            anchorPost,
+          )
+          await server.mocker.users[
+            'blockedby-account'
+          ].agent.app.bsky.graph.block.create(
+            {
+              repo: server.mocker.users['blockedby-account'].did,
+            },
+            {
+              subject: server.mocker.users.alice.did,
+              createdAt: new Date().toISOString(),
+            },
+          )
+
+          await server.mocker.createPost(
+            'mutual-block-account',
+            'mutual-block post',
+          )
+          await server.mocker.createQuotePost(
+            'mutual-block-account',
+            'mutual-block quote post',
+            anchorPost,
+          )
+          await server.mocker.createReply(
+            'mutual-block-account',
+            'mutual-block reply',
+            anchorPost,
+          )
+          await server.mocker.users.alice.agent.app.bsky.graph.block.create(
+            {
+              repo: server.mocker.users.alice.did,
+            },
+            {
+              subject: server.mocker.users['mutual-block-account'].did,
+              createdAt: new Date().toISOString(),
+            },
+          )
+          await server.mocker.users[
+            'mutual-block-account'
+          ].agent.app.bsky.graph.block.create(
+            {
+              repo: server.mocker.users['mutual-block-account'].did,
+            },
+            {
+              subject: server.mocker.users.alice.did,
+              createdAt: new Date().toISOString(),
+            },
+          )
         }
       }
       console.log('Ready')
diff --git a/__e2e__/tests/profile-screen.test.ts b/__e2e__/tests/profile-screen.test.ts
index 6c6d6db9c..7d2b5c363 100644
--- a/__e2e__/tests/profile-screen.test.ts
+++ b/__e2e__/tests/profile-screen.test.ts
@@ -53,7 +53,7 @@ describe('Profile screen', () => {
     await expect(element(by.id('profileHeaderDisplayName'))).toHaveText(
       'alice.test',
     )
-    await expect(element(by.id('profileHeaderDescription'))).toHaveText('')
+    await expect(element(by.id('profileHeaderDescription'))).not.toExist()
   })
 
   it('Set avi and banner via the edit profile modal', async () => {
@@ -107,13 +107,13 @@ describe('Profile screen', () => {
   })
 
   it('Can mute/unmute another user', async () => {
-    await expect(element(by.id('profileHeaderMutedNotice'))).not.toExist()
+    await expect(element(by.id('profileHeaderAlert'))).not.toExist()
     await element(by.id('profileHeaderDropdownBtn')).tap()
     await element(by.text('Mute Account')).tap()
-    await expect(element(by.id('profileHeaderMutedNotice'))).toBeVisible()
+    await expect(element(by.id('profileHeaderAlert'))).toBeVisible()
     await element(by.id('profileHeaderDropdownBtn')).tap()
     await element(by.text('Unmute Account')).tap()
-    await expect(element(by.id('profileHeaderMutedNotice'))).not.toExist()
+    await expect(element(by.id('profileHeaderAlert'))).not.toExist()
   })
 
   it('Can report another user', async () => {