@atproto/bsky 0.0.75 → 0.0.77
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/dist/api/app/bsky/actor/getProfiles.d.ts.map +1 -1
- package/dist/api/app/bsky/actor/getProfiles.js +9 -1
- package/dist/api/app/bsky/actor/getProfiles.js.map +1 -1
- package/dist/api/app/bsky/actor/searchActorsTypeahead.js +10 -2
- package/dist/api/app/bsky/actor/searchActorsTypeahead.js.map +1 -1
- package/dist/api/app/bsky/feed/getActorLikes.js +2 -2
- package/dist/api/app/bsky/feed/getActorLikes.js.map +1 -1
- package/dist/api/app/bsky/feed/getFeed.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getFeed.js +8 -1
- package/dist/api/app/bsky/feed/getFeed.js.map +1 -1
- package/dist/api/app/bsky/feed/getLikes.js +6 -6
- package/dist/api/app/bsky/feed/getLikes.js.map +1 -1
- package/dist/api/app/bsky/feed/getPosts.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getPosts.js +12 -5
- package/dist/api/app/bsky/feed/getPosts.js.map +1 -1
- package/dist/api/app/bsky/feed/getQuotes.d.ts +4 -0
- package/dist/api/app/bsky/feed/getQuotes.d.ts.map +1 -0
- package/dist/api/app/bsky/feed/getQuotes.js +67 -0
- package/dist/api/app/bsky/feed/getQuotes.js.map +1 -0
- package/dist/api/app/bsky/feed/getRepostedBy.js +6 -6
- package/dist/api/app/bsky/feed/getRepostedBy.js.map +1 -1
- package/dist/api/app/bsky/feed/searchPosts.js +4 -4
- package/dist/api/app/bsky/feed/searchPosts.js.map +1 -1
- package/dist/api/app/bsky/graph/getFollowers.js +8 -8
- package/dist/api/app/bsky/graph/getFollowers.js.map +1 -1
- package/dist/api/app/bsky/graph/getList.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getList.js +32 -2
- package/dist/api/app/bsky/graph/getList.js.map +1 -1
- package/dist/api/app/bsky/notification/listNotifications.d.ts.map +1 -1
- package/dist/api/app/bsky/notification/listNotifications.js +29 -8
- package/dist/api/app/bsky/notification/listNotifications.js.map +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +2 -0
- package/dist/api/index.js.map +1 -1
- package/dist/auth-verifier.d.ts +8 -3
- package/dist/auth-verifier.d.ts.map +1 -1
- package/dist/auth-verifier.js +43 -29
- package/dist/auth-verifier.js.map +1 -1
- package/dist/data-plane/server/db/database-schema.d.ts +4 -2
- package/dist/data-plane/server/db/database-schema.d.ts.map +1 -1
- package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.d.ts +4 -0
- package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.d.ts.map +1 -0
- package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.js +15 -0
- package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.js.map +1 -0
- package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.d.ts +4 -0
- package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.d.ts.map +1 -0
- package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.js +30 -0
- package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.js.map +1 -0
- package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.d.ts +4 -0
- package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.d.ts.map +1 -0
- package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.js +20 -0
- package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.js.map +1 -0
- package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.d.ts +4 -0
- package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.d.ts.map +1 -0
- package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.js +28 -0
- package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.js.map +1 -0
- package/dist/data-plane/server/db/migrations/index.d.ts +4 -0
- package/dist/data-plane/server/db/migrations/index.d.ts.map +1 -1
- package/dist/data-plane/server/db/migrations/index.js +5 -1
- package/dist/data-plane/server/db/migrations/index.js.map +1 -1
- package/dist/data-plane/server/db/tables/post-agg.d.ts +1 -0
- package/dist/data-plane/server/db/tables/post-agg.d.ts.map +1 -1
- package/dist/data-plane/server/db/tables/post-gate.d.ts +14 -0
- package/dist/data-plane/server/db/tables/post-gate.d.ts.map +1 -0
- package/dist/data-plane/server/db/tables/post-gate.js +4 -0
- package/dist/data-plane/server/db/tables/post-gate.js.map +1 -0
- package/dist/data-plane/server/db/tables/post.d.ts +3 -0
- package/dist/data-plane/server/db/tables/post.d.ts.map +1 -1
- package/dist/data-plane/server/db/tables/quote.d.ts +16 -0
- package/dist/data-plane/server/db/tables/quote.d.ts.map +1 -0
- package/dist/data-plane/server/db/tables/quote.js +4 -0
- package/dist/data-plane/server/db/tables/quote.js.map +1 -0
- package/dist/data-plane/server/indexing/index.d.ts +2 -0
- package/dist/data-plane/server/indexing/index.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/index.js +6 -0
- package/dist/data-plane/server/indexing/index.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/post-gate.d.ts +10 -0
- package/dist/data-plane/server/indexing/plugins/post-gate.d.ts.map +1 -0
- package/dist/data-plane/server/indexing/plugins/post-gate.js +101 -0
- package/dist/data-plane/server/indexing/plugins/post-gate.js.map +1 -0
- package/dist/data-plane/server/indexing/plugins/post.d.ts +2 -0
- package/dist/data-plane/server/indexing/plugins/post.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/post.js +122 -15
- package/dist/data-plane/server/indexing/plugins/post.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/thread-gate.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/thread-gate.js +12 -0
- package/dist/data-plane/server/indexing/plugins/thread-gate.js.map +1 -1
- package/dist/data-plane/server/routes/index.d.ts.map +1 -1
- package/dist/data-plane/server/routes/index.js +2 -0
- package/dist/data-plane/server/routes/index.js.map +1 -1
- package/dist/data-plane/server/routes/interactions.d.ts.map +1 -1
- package/dist/data-plane/server/routes/interactions.js +2 -1
- package/dist/data-plane/server/routes/interactions.js.map +1 -1
- package/dist/data-plane/server/routes/quotes.d.ts +6 -0
- package/dist/data-plane/server/routes/quotes.d.ts.map +1 -0
- package/dist/data-plane/server/routes/quotes.js +27 -0
- package/dist/data-plane/server/routes/quotes.js.map +1 -0
- package/dist/data-plane/server/routes/records.d.ts.map +1 -1
- package/dist/data-plane/server/routes/records.js +11 -1
- package/dist/data-plane/server/routes/records.js.map +1 -1
- package/dist/data-plane/server/util.d.ts +6 -7
- package/dist/data-plane/server/util.d.ts.map +1 -1
- package/dist/data-plane/server/util.js +1 -9
- package/dist/data-plane/server/util.js.map +1 -1
- package/dist/hydration/feed.d.ts +10 -0
- package/dist/hydration/feed.d.ts.map +1 -1
- package/dist/hydration/feed.js +31 -7
- package/dist/hydration/feed.js.map +1 -1
- package/dist/hydration/hydrator.d.ts +5 -2
- package/dist/hydration/hydrator.d.ts.map +1 -1
- package/dist/hydration/hydrator.js +102 -38
- package/dist/hydration/hydrator.js.map +1 -1
- package/dist/hydration/util.d.ts +0 -1
- package/dist/hydration/util.d.ts.map +1 -1
- package/dist/hydration/util.js +1 -5
- package/dist/hydration/util.js.map +1 -1
- package/dist/lexicon/index.d.ts +2 -0
- package/dist/lexicon/index.d.ts.map +1 -1
- package/dist/lexicon/index.js +4 -0
- package/dist/lexicon/index.js.map +1 -1
- package/dist/lexicon/lexicons.d.ts +141 -0
- package/dist/lexicon/lexicons.d.ts.map +1 -1
- package/dist/lexicon/lexicons.js +142 -0
- package/dist/lexicon/lexicons.js.map +1 -1
- package/dist/lexicon/types/app/bsky/embed/record.d.ts +8 -1
- package/dist/lexicon/types/app/bsky/embed/record.d.ts.map +1 -1
- package/dist/lexicon/types/app/bsky/embed/record.js +11 -1
- package/dist/lexicon/types/app/bsky/embed/record.js.map +1 -1
- package/dist/lexicon/types/app/bsky/feed/defs.d.ts +2 -0
- package/dist/lexicon/types/app/bsky/feed/defs.d.ts.map +1 -1
- package/dist/lexicon/types/app/bsky/feed/defs.js.map +1 -1
- package/dist/lexicon/types/app/bsky/feed/getQuotes.d.ts +44 -0
- package/dist/lexicon/types/app/bsky/feed/getQuotes.d.ts.map +1 -0
- package/dist/lexicon/types/app/bsky/feed/getQuotes.js +3 -0
- package/dist/lexicon/types/app/bsky/feed/getQuotes.js.map +1 -0
- package/dist/lexicon/types/app/bsky/feed/postgate.d.ts +25 -0
- package/dist/lexicon/types/app/bsky/feed/postgate.d.ts.map +1 -0
- package/dist/lexicon/types/app/bsky/feed/postgate.js +27 -0
- package/dist/lexicon/types/app/bsky/feed/postgate.js.map +1 -0
- package/dist/lexicon/types/app/bsky/feed/threadgate.d.ts +2 -0
- package/dist/lexicon/types/app/bsky/feed/threadgate.d.ts.map +1 -1
- package/dist/lexicon/types/app/bsky/feed/threadgate.js.map +1 -1
- package/dist/proto/bsky_connect.d.ts +21 -1
- package/dist/proto/bsky_connect.d.ts.map +1 -1
- package/dist/proto/bsky_connect.js +20 -0
- package/dist/proto/bsky_connect.js.map +1 -1
- package/dist/proto/bsky_pb.d.ts +96 -0
- package/dist/proto/bsky_pb.d.ts.map +1 -1
- package/dist/proto/bsky_pb.js +306 -4
- package/dist/proto/bsky_pb.js.map +1 -1
- package/dist/util/uris.d.ts +12 -0
- package/dist/util/uris.d.ts.map +1 -0
- package/dist/util/uris.js +34 -0
- package/dist/util/uris.js.map +1 -0
- package/dist/views/index.d.ts +8 -2
- package/dist/views/index.d.ts.map +1 -1
- package/dist/views/index.js +83 -39
- package/dist/views/index.js.map +1 -1
- package/dist/views/types.d.ts +1 -1
- package/dist/views/types.d.ts.map +1 -1
- package/dist/views/types.js.map +1 -1
- package/dist/views/util.d.ts +11 -1
- package/dist/views/util.d.ts.map +1 -1
- package/dist/views/util.js +19 -8
- package/dist/views/util.js.map +1 -1
- package/package.json +6 -6
- package/proto/bsky.proto +33 -0
- package/src/api/app/bsky/actor/getProfiles.ts +10 -1
- package/src/api/app/bsky/actor/searchActorsTypeahead.ts +9 -4
- package/src/api/app/bsky/feed/getActorLikes.ts +1 -1
- package/src/api/app/bsky/feed/getFeed.ts +12 -1
- package/src/api/app/bsky/feed/getLikes.ts +1 -1
- package/src/api/app/bsky/feed/getPosts.ts +10 -2
- package/src/api/app/bsky/feed/getQuotes.ts +105 -0
- package/src/api/app/bsky/feed/getRepostedBy.ts +1 -1
- package/src/api/app/bsky/feed/searchPosts.ts +1 -1
- package/src/api/app/bsky/graph/getFollowers.ts +1 -1
- package/src/api/app/bsky/graph/getList.ts +47 -4
- package/src/api/app/bsky/notification/listNotifications.ts +32 -6
- package/src/api/index.ts +2 -0
- package/src/auth-verifier.ts +78 -51
- package/src/data-plane/server/db/database-schema.ts +7 -3
- package/src/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.ts +12 -0
- package/src/data-plane/server/db/migrations/20240723T220703655Z-quotes.ts +28 -0
- package/src/data-plane/server/db/migrations/20240801T193939827Z-post-gate.ts +17 -0
- package/src/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.ts +25 -0
- package/src/data-plane/server/db/migrations/index.ts +4 -0
- package/src/data-plane/server/db/tables/post-agg.ts +1 -0
- package/src/data-plane/server/db/tables/post-gate.ts +12 -0
- package/src/data-plane/server/db/tables/post.ts +3 -0
- package/src/data-plane/server/db/tables/quote.ts +15 -0
- package/src/data-plane/server/indexing/index.ts +7 -0
- package/src/data-plane/server/indexing/plugins/post-gate.ts +104 -0
- package/src/data-plane/server/indexing/plugins/post.ts +151 -16
- package/src/data-plane/server/indexing/plugins/thread-gate.ts +12 -0
- package/src/data-plane/server/routes/index.ts +2 -0
- package/src/data-plane/server/routes/interactions.ts +2 -1
- package/src/data-plane/server/routes/quotes.ts +32 -0
- package/src/data-plane/server/routes/records.ts +11 -1
- package/src/data-plane/server/util.ts +0 -8
- package/src/hydration/feed.ts +58 -12
- package/src/hydration/hydrator.ts +112 -24
- package/src/hydration/util.ts +0 -4
- package/src/lexicon/index.ts +12 -0
- package/src/lexicon/lexicons.ts +145 -0
- package/src/lexicon/types/app/bsky/embed/record.ts +19 -0
- package/src/lexicon/types/app/bsky/feed/defs.ts +2 -0
- package/src/lexicon/types/app/bsky/feed/getQuotes.ts +54 -0
- package/src/lexicon/types/app/bsky/feed/postgate.ts +47 -0
- package/src/lexicon/types/app/bsky/feed/threadgate.ts +2 -0
- package/src/proto/bsky_connect.ts +24 -0
- package/src/proto/bsky_pb.ts +289 -0
- package/src/util/uris.ts +31 -0
- package/src/views/index.ts +90 -35
- package/src/views/types.ts +1 -0
- package/src/views/util.ts +37 -7
- package/tests/__snapshots__/feed-generation.test.ts.snap +37 -0
- package/tests/admin/admin-auth.test.ts +15 -8
- package/tests/auth.test.ts +2 -1
- package/tests/data-plane/__snapshots__/indexing.test.ts.snap +18 -0
- package/tests/data-plane/handle-invalidation.test.ts +31 -5
- package/tests/data-plane/indexing.test.ts +139 -23
- package/tests/data-plane/thread-mutes.test.ts +41 -9
- package/tests/feed-generation.test.ts +150 -32
- package/tests/postgates.test.ts +186 -0
- package/tests/seed/feed-hidden-replies.ts +62 -0
- package/tests/seed/postgates.ts +56 -0
- package/tests/server.test.ts +1 -1
- package/tests/views/__snapshots__/author-feed.test.ts.snap +56 -0
- package/tests/views/__snapshots__/block-lists.test.ts.snap +6 -0
- package/tests/views/__snapshots__/blocks.test.ts.snap +10 -0
- package/tests/views/__snapshots__/list-feed.test.ts.snap +22 -0
- package/tests/views/__snapshots__/lists.test.ts.snap +145 -26
- package/tests/views/__snapshots__/mute-lists.test.ts.snap +8 -0
- package/tests/views/__snapshots__/mutes.test.ts.snap +6 -0
- package/tests/views/__snapshots__/posts.test.ts.snap +12 -0
- package/tests/views/__snapshots__/quotes.test.ts.snap +399 -0
- package/tests/views/__snapshots__/starter-packs.test.ts.snap +245 -4
- package/tests/views/__snapshots__/thread.test.ts.snap +50 -0
- package/tests/views/__snapshots__/timeline.test.ts.snap +170 -0
- package/tests/views/account-deactivation.test.ts +8 -2
- package/tests/views/actor-likes.test.ts +27 -6
- package/tests/views/actor-search.test.ts +5 -1
- package/tests/views/author-feed.test.ts +76 -21
- package/tests/views/block-lists.test.ts +201 -40
- package/tests/views/blocks.test.ts +245 -46
- package/tests/views/feed-hidden-replies.test.ts +246 -0
- package/tests/views/feed-view-post.test.ts +501 -0
- package/tests/views/follows.test.ts +133 -22
- package/tests/views/known-followers.test.ts +43 -7
- package/tests/views/labeler-service.test.ts +36 -6
- package/tests/views/likes.test.ts +8 -5
- package/tests/views/list-feed.test.ts +25 -4
- package/tests/views/lists.test.ts +73 -31
- package/tests/views/mute-lists.test.ts +101 -29
- package/tests/views/mutes.test.ts +77 -17
- package/tests/views/notifications.test.ts +141 -25
- package/tests/views/posts.test.ts +13 -2
- package/tests/views/profile.test.ts +37 -11
- package/tests/views/quotes.test.ts +105 -0
- package/tests/views/reposts.test.ts +31 -5
- package/tests/views/starter-packs.test.ts +83 -3
- package/tests/views/suggested-follows.test.ts +31 -5
- package/tests/views/suggestions.test.ts +37 -6
- package/tests/views/thread.test.ts +121 -20
- package/tests/views/threadgating.test.ts +128 -22
- package/tests/views/timeline.test.ts +67 -14
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { AtpAgent } from '@atproto/api'
|
|
2
|
-
import { TestNetwork, SeedClient,
|
|
2
|
+
import { TestNetwork, SeedClient, RecordRef, basicSeed } from '@atproto/dev-env'
|
|
3
3
|
import { isRecord as isProfile } from '../../src/lexicon/types/app/bsky/actor/profile'
|
|
4
4
|
import { forSnapshot } from '../_util'
|
|
5
5
|
import assert from 'assert'
|
|
6
|
+
import { ids } from '../../src/lexicon/lexicons'
|
|
6
7
|
|
|
7
8
|
describe('starter packs', () => {
|
|
8
9
|
let network: TestNetwork
|
|
@@ -10,6 +11,7 @@ describe('starter packs', () => {
|
|
|
10
11
|
let sc: SeedClient
|
|
11
12
|
let sp1: RecordRef
|
|
12
13
|
let sp2: RecordRef
|
|
14
|
+
let sp3: RecordRef
|
|
13
15
|
|
|
14
16
|
beforeAll(async () => {
|
|
15
17
|
network = await TestNetwork.create({
|
|
@@ -47,6 +49,25 @@ describe('starter packs', () => {
|
|
|
47
49
|
})
|
|
48
50
|
await sc.createProfile(did, `Newskie ${n}`, 'New here', [], sp1)
|
|
49
51
|
}
|
|
52
|
+
|
|
53
|
+
await sc.createAccount('frankie', {
|
|
54
|
+
handle: 'frankie.test',
|
|
55
|
+
email: 'frankie@frankie.com',
|
|
56
|
+
password: 'password',
|
|
57
|
+
})
|
|
58
|
+
await sc.createAccount('greta', {
|
|
59
|
+
handle: 'greta.test',
|
|
60
|
+
email: 'greta@greta.com',
|
|
61
|
+
password: 'password',
|
|
62
|
+
})
|
|
63
|
+
sp3 = await sc.createStarterPack(
|
|
64
|
+
sc.dids.alice,
|
|
65
|
+
"alice's about to get blocked starter pack",
|
|
66
|
+
[sc.dids.alice, sc.dids.frankie, sc.dids.greta],
|
|
67
|
+
[],
|
|
68
|
+
)
|
|
69
|
+
await sc.block(sc.dids.frankie, sc.dids.alice)
|
|
70
|
+
|
|
50
71
|
await network.processAll()
|
|
51
72
|
})
|
|
52
73
|
|
|
@@ -58,7 +79,7 @@ describe('starter packs', () => {
|
|
|
58
79
|
const { data } = await agent.api.app.bsky.graph.getActorStarterPacks({
|
|
59
80
|
actor: sc.dids.alice,
|
|
60
81
|
})
|
|
61
|
-
expect(data.starterPacks).toHaveLength(
|
|
82
|
+
expect(data.starterPacks).toHaveLength(3)
|
|
62
83
|
expect(forSnapshot(data.starterPacks)).toMatchSnapshot()
|
|
63
84
|
})
|
|
64
85
|
|
|
@@ -106,7 +127,12 @@ describe('starter packs', () => {
|
|
|
106
127
|
data: { notifications },
|
|
107
128
|
} = await agent.api.app.bsky.notification.listNotifications(
|
|
108
129
|
{ limit: 3 }, // three most recent
|
|
109
|
-
{
|
|
130
|
+
{
|
|
131
|
+
headers: await network.serviceHeaders(
|
|
132
|
+
sc.dids.alice,
|
|
133
|
+
ids.AppBskyNotificationListNotifications,
|
|
134
|
+
),
|
|
135
|
+
},
|
|
110
136
|
)
|
|
111
137
|
expect(notifications).toHaveLength(3)
|
|
112
138
|
notifications.forEach((notif) => {
|
|
@@ -118,4 +144,58 @@ describe('starter packs', () => {
|
|
|
118
144
|
})
|
|
119
145
|
expect(forSnapshot(notifications)).toMatchSnapshot()
|
|
120
146
|
})
|
|
147
|
+
|
|
148
|
+
it('does not include users with creator block relationship in list sample for non-creator, in-list viewers', async () => {
|
|
149
|
+
const view = await agent.api.app.bsky.graph.getStarterPack(
|
|
150
|
+
{
|
|
151
|
+
starterPack: sp3.uriStr,
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
headers: await network.serviceHeaders(
|
|
155
|
+
sc.dids.frankie,
|
|
156
|
+
ids.AppBskyGraphGetStarterPack,
|
|
157
|
+
),
|
|
158
|
+
},
|
|
159
|
+
)
|
|
160
|
+
expect(view.data.starterPack.listItemsSample?.length).toBe(2)
|
|
161
|
+
expect(forSnapshot(view.data.starterPack.listItemsSample)).toMatchSnapshot()
|
|
162
|
+
})
|
|
163
|
+
|
|
164
|
+
it('does not include users with creator block relationship in list sample for non-creator, not-in-list viewers', async () => {
|
|
165
|
+
const view = await agent.api.app.bsky.graph.getStarterPack(
|
|
166
|
+
{
|
|
167
|
+
starterPack: sp3.uriStr,
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
headers: await network.serviceHeaders(
|
|
171
|
+
sc.dids.bob,
|
|
172
|
+
ids.AppBskyGraphGetStarterPack,
|
|
173
|
+
),
|
|
174
|
+
},
|
|
175
|
+
)
|
|
176
|
+
expect(view.data.starterPack.listItemsSample?.length).toBe(2)
|
|
177
|
+
expect(forSnapshot(view.data.starterPack.listItemsSample)).toMatchSnapshot()
|
|
178
|
+
})
|
|
179
|
+
|
|
180
|
+
it('does not include users with creator block relationship in list sample for signed-out viewers', async () => {
|
|
181
|
+
const view = await agent.api.app.bsky.graph.getStarterPack({
|
|
182
|
+
starterPack: sp3.uriStr,
|
|
183
|
+
})
|
|
184
|
+
expect(view.data.starterPack.listItemsSample?.length).toBe(2)
|
|
185
|
+
expect(forSnapshot(view.data.starterPack.listItemsSample)).toMatchSnapshot()
|
|
186
|
+
})
|
|
187
|
+
|
|
188
|
+
it('does include users with creator block relationship in list sample for creator', async () => {
|
|
189
|
+
const view = await agent.api.app.bsky.graph.getStarterPack(
|
|
190
|
+
{ starterPack: sp3.uriStr },
|
|
191
|
+
{
|
|
192
|
+
headers: await network.serviceHeaders(
|
|
193
|
+
sc.dids.alice,
|
|
194
|
+
ids.AppBskyGraphGetStarterPack,
|
|
195
|
+
),
|
|
196
|
+
},
|
|
197
|
+
)
|
|
198
|
+
expect(view.data.starterPack.listItemsSample?.length).toBe(3)
|
|
199
|
+
expect(forSnapshot(view.data.starterPack.listItemsSample)).toMatchSnapshot()
|
|
200
|
+
})
|
|
121
201
|
})
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AtpAgent, AtUri } from '@atproto/api'
|
|
2
2
|
import { TestNetwork, SeedClient, likesSeed } from '@atproto/dev-env'
|
|
3
|
+
import { ids } from '../../src/lexicon/lexicons'
|
|
3
4
|
|
|
4
5
|
describe('suggested follows', () => {
|
|
5
6
|
let network: TestNetwork
|
|
@@ -40,7 +41,12 @@ describe('suggested follows', () => {
|
|
|
40
41
|
{
|
|
41
42
|
actor: sc.dids.alice,
|
|
42
43
|
},
|
|
43
|
-
{
|
|
44
|
+
{
|
|
45
|
+
headers: await network.serviceHeaders(
|
|
46
|
+
sc.dids.carol,
|
|
47
|
+
ids.AppBskyGraphGetSuggestedFollowsByActor,
|
|
48
|
+
),
|
|
49
|
+
},
|
|
44
50
|
)
|
|
45
51
|
|
|
46
52
|
expect(result.data.suggestions.length).toBe(4) // backfilled with 2 NPCs
|
|
@@ -56,7 +62,12 @@ describe('suggested follows', () => {
|
|
|
56
62
|
{
|
|
57
63
|
actor: sc.dids.alice,
|
|
58
64
|
},
|
|
59
|
-
{
|
|
65
|
+
{
|
|
66
|
+
headers: await network.serviceHeaders(
|
|
67
|
+
sc.dids.fred,
|
|
68
|
+
ids.AppBskyGraphGetSuggestedFollowsByActor,
|
|
69
|
+
),
|
|
70
|
+
},
|
|
60
71
|
)
|
|
61
72
|
|
|
62
73
|
expect(result.data.suggestions.length).toBe(4) // backfilled with 2 NPCs
|
|
@@ -76,7 +87,12 @@ describe('suggested follows', () => {
|
|
|
76
87
|
{
|
|
77
88
|
actor: sc.dids.alice,
|
|
78
89
|
},
|
|
79
|
-
{
|
|
90
|
+
{
|
|
91
|
+
headers: await network.serviceHeaders(
|
|
92
|
+
sc.dids.carol,
|
|
93
|
+
ids.AppBskyGraphGetSuggestedFollowsByActor,
|
|
94
|
+
),
|
|
95
|
+
},
|
|
80
96
|
)
|
|
81
97
|
|
|
82
98
|
expect(
|
|
@@ -101,7 +117,12 @@ describe('suggested follows', () => {
|
|
|
101
117
|
{
|
|
102
118
|
actor: sc.dids.alice,
|
|
103
119
|
},
|
|
104
|
-
{
|
|
120
|
+
{
|
|
121
|
+
headers: await network.serviceHeaders(
|
|
122
|
+
sc.dids.carol,
|
|
123
|
+
ids.AppBskyGraphGetSuggestedFollowsByActor,
|
|
124
|
+
),
|
|
125
|
+
},
|
|
105
126
|
)
|
|
106
127
|
|
|
107
128
|
expect(
|
|
@@ -126,7 +147,12 @@ describe('suggested follows', () => {
|
|
|
126
147
|
{
|
|
127
148
|
actor: sc.dids.alice,
|
|
128
149
|
},
|
|
129
|
-
{
|
|
150
|
+
{
|
|
151
|
+
headers: await network.serviceHeaders(
|
|
152
|
+
sc.dids.carol,
|
|
153
|
+
ids.AppBskyGraphGetSuggestedFollowsByActor,
|
|
154
|
+
),
|
|
155
|
+
},
|
|
130
156
|
)
|
|
131
157
|
|
|
132
158
|
expect(
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AtpAgent } from '@atproto/api'
|
|
2
2
|
import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env'
|
|
3
3
|
import { stripViewer } from '../_util'
|
|
4
|
+
import { ids } from '../../src/lexicon/lexicons'
|
|
4
5
|
|
|
5
6
|
describe('pds user search views', () => {
|
|
6
7
|
let network: TestNetwork
|
|
@@ -36,7 +37,12 @@ describe('pds user search views', () => {
|
|
|
36
37
|
it('actor suggestion gives users', async () => {
|
|
37
38
|
const result = await agent.api.app.bsky.actor.getSuggestions(
|
|
38
39
|
{},
|
|
39
|
-
{
|
|
40
|
+
{
|
|
41
|
+
headers: await network.serviceHeaders(
|
|
42
|
+
sc.dids.carol,
|
|
43
|
+
ids.AppBskyActorGetSuggestions,
|
|
44
|
+
),
|
|
45
|
+
},
|
|
40
46
|
)
|
|
41
47
|
|
|
42
48
|
// does not include carol, because she is requesting
|
|
@@ -50,7 +56,12 @@ describe('pds user search views', () => {
|
|
|
50
56
|
it('does not suggest followed users', async () => {
|
|
51
57
|
const result = await agent.api.app.bsky.actor.getSuggestions(
|
|
52
58
|
{},
|
|
53
|
-
{
|
|
59
|
+
{
|
|
60
|
+
headers: await network.serviceHeaders(
|
|
61
|
+
sc.dids.alice,
|
|
62
|
+
ids.AppBskyActorGetSuggestions,
|
|
63
|
+
),
|
|
64
|
+
},
|
|
54
65
|
)
|
|
55
66
|
|
|
56
67
|
// alice follows everyone
|
|
@@ -60,21 +71,36 @@ describe('pds user search views', () => {
|
|
|
60
71
|
it('paginates', async () => {
|
|
61
72
|
const result1 = await agent.api.app.bsky.actor.getSuggestions(
|
|
62
73
|
{ limit: 2 },
|
|
63
|
-
{
|
|
74
|
+
{
|
|
75
|
+
headers: await network.serviceHeaders(
|
|
76
|
+
sc.dids.carol,
|
|
77
|
+
ids.AppBskyActorGetSuggestions,
|
|
78
|
+
),
|
|
79
|
+
},
|
|
64
80
|
)
|
|
65
81
|
expect(result1.data.actors.length).toBe(1)
|
|
66
82
|
expect(result1.data.actors[0].handle).toEqual('bob.test')
|
|
67
83
|
|
|
68
84
|
const result2 = await agent.api.app.bsky.actor.getSuggestions(
|
|
69
85
|
{ limit: 2, cursor: result1.data.cursor },
|
|
70
|
-
{
|
|
86
|
+
{
|
|
87
|
+
headers: await network.serviceHeaders(
|
|
88
|
+
sc.dids.carol,
|
|
89
|
+
ids.AppBskyActorGetSuggestions,
|
|
90
|
+
),
|
|
91
|
+
},
|
|
71
92
|
)
|
|
72
93
|
expect(result2.data.actors.length).toBe(1)
|
|
73
94
|
expect(result2.data.actors[0].handle).toEqual('dan.test')
|
|
74
95
|
|
|
75
96
|
const result3 = await agent.api.app.bsky.actor.getSuggestions(
|
|
76
97
|
{ limit: 2, cursor: result2.data.cursor },
|
|
77
|
-
{
|
|
98
|
+
{
|
|
99
|
+
headers: await network.serviceHeaders(
|
|
100
|
+
sc.dids.carol,
|
|
101
|
+
ids.AppBskyActorGetSuggestions,
|
|
102
|
+
),
|
|
103
|
+
},
|
|
78
104
|
)
|
|
79
105
|
expect(result3.data.actors.length).toBe(0)
|
|
80
106
|
expect(result3.data.cursor).toBeUndefined()
|
|
@@ -83,7 +109,12 @@ describe('pds user search views', () => {
|
|
|
83
109
|
it('fetches suggestions unauthed', async () => {
|
|
84
110
|
const { data: authed } = await agent.api.app.bsky.actor.getSuggestions(
|
|
85
111
|
{},
|
|
86
|
-
{
|
|
112
|
+
{
|
|
113
|
+
headers: await network.serviceHeaders(
|
|
114
|
+
sc.dids.carol,
|
|
115
|
+
ids.AppBskyActorGetSuggestions,
|
|
116
|
+
),
|
|
117
|
+
},
|
|
87
118
|
)
|
|
88
119
|
const { data: unauthed } = await agent.api.app.bsky.actor.getSuggestions({})
|
|
89
120
|
const omitViewerFollows = ({ did }) => {
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
forSnapshot,
|
|
6
6
|
stripViewerFromThread,
|
|
7
7
|
} from '../_util'
|
|
8
|
+
import { ids } from '../../src/lexicon/lexicons'
|
|
8
9
|
|
|
9
10
|
describe('pds thread views', () => {
|
|
10
11
|
let network: TestNetwork
|
|
@@ -41,7 +42,12 @@ describe('pds thread views', () => {
|
|
|
41
42
|
it('fetches deep post thread', async () => {
|
|
42
43
|
const thread = await agent.api.app.bsky.feed.getPostThread(
|
|
43
44
|
{ uri: sc.posts[alice][1].ref.uriStr },
|
|
44
|
-
{
|
|
45
|
+
{
|
|
46
|
+
headers: await network.serviceHeaders(
|
|
47
|
+
bob,
|
|
48
|
+
ids.AppBskyFeedGetPostThread,
|
|
49
|
+
),
|
|
50
|
+
},
|
|
45
51
|
)
|
|
46
52
|
|
|
47
53
|
expect(forSnapshot(thread.data.thread)).toMatchSnapshot()
|
|
@@ -50,7 +56,12 @@ describe('pds thread views', () => {
|
|
|
50
56
|
it('fetches shallow post thread', async () => {
|
|
51
57
|
const thread = await agent.api.app.bsky.feed.getPostThread(
|
|
52
58
|
{ depth: 1, uri: sc.posts[alice][1].ref.uriStr },
|
|
53
|
-
{
|
|
59
|
+
{
|
|
60
|
+
headers: await network.serviceHeaders(
|
|
61
|
+
bob,
|
|
62
|
+
ids.AppBskyFeedGetPostThread,
|
|
63
|
+
),
|
|
64
|
+
},
|
|
54
65
|
)
|
|
55
66
|
|
|
56
67
|
expect(forSnapshot(thread.data.thread)).toMatchSnapshot()
|
|
@@ -65,7 +76,12 @@ describe('pds thread views', () => {
|
|
|
65
76
|
`at://${sc.accounts[alice].handle}`,
|
|
66
77
|
),
|
|
67
78
|
},
|
|
68
|
-
{
|
|
79
|
+
{
|
|
80
|
+
headers: await network.serviceHeaders(
|
|
81
|
+
bob,
|
|
82
|
+
ids.AppBskyFeedGetPostThread,
|
|
83
|
+
),
|
|
84
|
+
},
|
|
69
85
|
)
|
|
70
86
|
|
|
71
87
|
expect(forSnapshot(thread.data.thread)).toMatchSnapshot()
|
|
@@ -74,7 +90,12 @@ describe('pds thread views', () => {
|
|
|
74
90
|
it('fetches ancestors', async () => {
|
|
75
91
|
const thread = await agent.api.app.bsky.feed.getPostThread(
|
|
76
92
|
{ depth: 1, uri: sc.replies[alice][0].ref.uriStr },
|
|
77
|
-
{
|
|
93
|
+
{
|
|
94
|
+
headers: await network.serviceHeaders(
|
|
95
|
+
bob,
|
|
96
|
+
ids.AppBskyFeedGetPostThread,
|
|
97
|
+
),
|
|
98
|
+
},
|
|
78
99
|
)
|
|
79
100
|
|
|
80
101
|
expect(forSnapshot(thread.data.thread)).toMatchSnapshot()
|
|
@@ -83,7 +104,12 @@ describe('pds thread views', () => {
|
|
|
83
104
|
it('fails for an unknown post', async () => {
|
|
84
105
|
const promise = agent.api.app.bsky.feed.getPostThread(
|
|
85
106
|
{ uri: 'at://did:example:fake/does.not.exist/self' },
|
|
86
|
-
{
|
|
107
|
+
{
|
|
108
|
+
headers: await network.serviceHeaders(
|
|
109
|
+
bob,
|
|
110
|
+
ids.AppBskyFeedGetPostThread,
|
|
111
|
+
),
|
|
112
|
+
},
|
|
87
113
|
)
|
|
88
114
|
|
|
89
115
|
await expect(promise).rejects.toThrow(
|
|
@@ -94,7 +120,12 @@ describe('pds thread views', () => {
|
|
|
94
120
|
it('fetches post thread unauthed', async () => {
|
|
95
121
|
const { data: authed } = await agent.api.app.bsky.feed.getPostThread(
|
|
96
122
|
{ uri: sc.posts[alice][1].ref.uriStr },
|
|
97
|
-
{
|
|
123
|
+
{
|
|
124
|
+
headers: await network.serviceHeaders(
|
|
125
|
+
bob,
|
|
126
|
+
ids.AppBskyFeedGetPostThread,
|
|
127
|
+
),
|
|
128
|
+
},
|
|
98
129
|
)
|
|
99
130
|
const { data: unauthed } = await agent.api.app.bsky.feed.getPostThread({
|
|
100
131
|
uri: sc.posts[alice][1].ref.uriStr,
|
|
@@ -133,7 +164,12 @@ describe('pds thread views', () => {
|
|
|
133
164
|
|
|
134
165
|
const thread1 = await agent.api.app.bsky.feed.getPostThread(
|
|
135
166
|
{ uri: sc.posts[alice][indexes.aliceRoot].ref.uriStr },
|
|
136
|
-
{
|
|
167
|
+
{
|
|
168
|
+
headers: await network.serviceHeaders(
|
|
169
|
+
bob,
|
|
170
|
+
ids.AppBskyFeedGetPostThread,
|
|
171
|
+
),
|
|
172
|
+
},
|
|
137
173
|
)
|
|
138
174
|
expect(forSnapshot(thread1.data.thread)).toMatchSnapshot()
|
|
139
175
|
|
|
@@ -142,13 +178,23 @@ describe('pds thread views', () => {
|
|
|
142
178
|
|
|
143
179
|
const thread2 = await agent.api.app.bsky.feed.getPostThread(
|
|
144
180
|
{ uri: sc.posts[alice][indexes.aliceRoot].ref.uriStr },
|
|
145
|
-
{
|
|
181
|
+
{
|
|
182
|
+
headers: await network.serviceHeaders(
|
|
183
|
+
bob,
|
|
184
|
+
ids.AppBskyFeedGetPostThread,
|
|
185
|
+
),
|
|
186
|
+
},
|
|
146
187
|
)
|
|
147
188
|
expect(forSnapshot(thread2.data.thread)).toMatchSnapshot()
|
|
148
189
|
|
|
149
190
|
const thread3 = await agent.api.app.bsky.feed.getPostThread(
|
|
150
191
|
{ uri: sc.replies[alice][indexes.aliceReplyReply].ref.uriStr },
|
|
151
|
-
{
|
|
192
|
+
{
|
|
193
|
+
headers: await network.serviceHeaders(
|
|
194
|
+
bob,
|
|
195
|
+
ids.AppBskyFeedGetPostThread,
|
|
196
|
+
),
|
|
197
|
+
},
|
|
152
198
|
)
|
|
153
199
|
expect(forSnapshot(thread3.data.thread)).toMatchSnapshot()
|
|
154
200
|
})
|
|
@@ -179,7 +225,12 @@ describe('pds thread views', () => {
|
|
|
179
225
|
const { data: goodReply1Thread } =
|
|
180
226
|
await agent.api.app.bsky.feed.getPostThread(
|
|
181
227
|
{ uri: goodReply1.ref.uriStr },
|
|
182
|
-
{
|
|
228
|
+
{
|
|
229
|
+
headers: await network.serviceHeaders(
|
|
230
|
+
alice,
|
|
231
|
+
ids.AppBskyFeedGetPostThread,
|
|
232
|
+
),
|
|
233
|
+
},
|
|
183
234
|
)
|
|
184
235
|
assertIsThreadViewPost(goodReply1Thread.thread)
|
|
185
236
|
assertIsThreadViewPost(goodReply1Thread.thread.parent)
|
|
@@ -197,7 +248,12 @@ describe('pds thread views', () => {
|
|
|
197
248
|
const { data: badReplyThread } =
|
|
198
249
|
await agent.api.app.bsky.feed.getPostThread(
|
|
199
250
|
{ uri: badReply.ref.uriStr },
|
|
200
|
-
{
|
|
251
|
+
{
|
|
252
|
+
headers: await network.serviceHeaders(
|
|
253
|
+
alice,
|
|
254
|
+
ids.AppBskyFeedGetPostThread,
|
|
255
|
+
),
|
|
256
|
+
},
|
|
201
257
|
)
|
|
202
258
|
assertIsThreadViewPost(badReplyThread.thread)
|
|
203
259
|
expect(badReplyThread.thread.parent).toBeUndefined() // is not goodReply1
|
|
@@ -206,7 +262,12 @@ describe('pds thread views', () => {
|
|
|
206
262
|
it('reflects self-labels', async () => {
|
|
207
263
|
const { data: thread } = await agent.api.app.bsky.feed.getPostThread(
|
|
208
264
|
{ uri: sc.posts[alice][0].ref.uriStr },
|
|
209
|
-
{
|
|
265
|
+
{
|
|
266
|
+
headers: await network.serviceHeaders(
|
|
267
|
+
bob,
|
|
268
|
+
ids.AppBskyFeedGetPostThread,
|
|
269
|
+
),
|
|
270
|
+
},
|
|
210
271
|
)
|
|
211
272
|
|
|
212
273
|
assertIsThreadViewPost(thread.thread)
|
|
@@ -236,7 +297,12 @@ describe('pds thread views', () => {
|
|
|
236
297
|
// Same as shallow post thread test, minus alice
|
|
237
298
|
const promise = agent.api.app.bsky.feed.getPostThread(
|
|
238
299
|
{ depth: 1, uri: sc.posts[alice][1].ref.uriStr },
|
|
239
|
-
{
|
|
300
|
+
{
|
|
301
|
+
headers: await network.serviceHeaders(
|
|
302
|
+
bob,
|
|
303
|
+
ids.AppBskyFeedGetPostThread,
|
|
304
|
+
),
|
|
305
|
+
},
|
|
240
306
|
)
|
|
241
307
|
|
|
242
308
|
await expect(promise).rejects.toThrow(
|
|
@@ -257,7 +323,12 @@ describe('pds thread views', () => {
|
|
|
257
323
|
// Same as deep post thread test, minus carol
|
|
258
324
|
const thread = await agent.api.app.bsky.feed.getPostThread(
|
|
259
325
|
{ uri: sc.posts[alice][1].ref.uriStr },
|
|
260
|
-
{
|
|
326
|
+
{
|
|
327
|
+
headers: await network.serviceHeaders(
|
|
328
|
+
bob,
|
|
329
|
+
ids.AppBskyFeedGetPostThread,
|
|
330
|
+
),
|
|
331
|
+
},
|
|
261
332
|
)
|
|
262
333
|
|
|
263
334
|
expect(forSnapshot(thread.data.thread)).toMatchSnapshot()
|
|
@@ -276,7 +347,12 @@ describe('pds thread views', () => {
|
|
|
276
347
|
// Same as ancestor post thread test, minus bob
|
|
277
348
|
const thread = await agent.api.app.bsky.feed.getPostThread(
|
|
278
349
|
{ depth: 1, uri: sc.replies[alice][0].ref.uriStr },
|
|
279
|
-
{
|
|
350
|
+
{
|
|
351
|
+
headers: await network.serviceHeaders(
|
|
352
|
+
bob,
|
|
353
|
+
ids.AppBskyFeedGetPostThread,
|
|
354
|
+
),
|
|
355
|
+
},
|
|
280
356
|
)
|
|
281
357
|
|
|
282
358
|
expect(forSnapshot(thread.data.thread)).toMatchSnapshot()
|
|
@@ -295,7 +371,12 @@ describe('pds thread views', () => {
|
|
|
295
371
|
|
|
296
372
|
const promise = agent.api.app.bsky.feed.getPostThread(
|
|
297
373
|
{ depth: 1, uri: postRef.uriStr },
|
|
298
|
-
{
|
|
374
|
+
{
|
|
375
|
+
headers: await network.serviceHeaders(
|
|
376
|
+
bob,
|
|
377
|
+
ids.AppBskyFeedGetPostThread,
|
|
378
|
+
),
|
|
379
|
+
},
|
|
299
380
|
)
|
|
300
381
|
|
|
301
382
|
await expect(promise).rejects.toThrow(
|
|
@@ -311,7 +392,12 @@ describe('pds thread views', () => {
|
|
|
311
392
|
it('blocks ancestors by record', async () => {
|
|
312
393
|
const threadPreTakedown = await agent.api.app.bsky.feed.getPostThread(
|
|
313
394
|
{ depth: 1, uri: sc.replies[alice][0].ref.uriStr },
|
|
314
|
-
{
|
|
395
|
+
{
|
|
396
|
+
headers: await network.serviceHeaders(
|
|
397
|
+
bob,
|
|
398
|
+
ids.AppBskyFeedGetPostThread,
|
|
399
|
+
),
|
|
400
|
+
},
|
|
315
401
|
)
|
|
316
402
|
|
|
317
403
|
const parent = threadPreTakedown.data.thread.parent?.['post']
|
|
@@ -323,7 +409,12 @@ describe('pds thread views', () => {
|
|
|
323
409
|
// Same as ancestor post thread test, minus parent post
|
|
324
410
|
const thread = await agent.api.app.bsky.feed.getPostThread(
|
|
325
411
|
{ depth: 1, uri: sc.replies[alice][0].ref.uriStr },
|
|
326
|
-
{
|
|
412
|
+
{
|
|
413
|
+
headers: await network.serviceHeaders(
|
|
414
|
+
bob,
|
|
415
|
+
ids.AppBskyFeedGetPostThread,
|
|
416
|
+
),
|
|
417
|
+
},
|
|
327
418
|
)
|
|
328
419
|
|
|
329
420
|
expect(forSnapshot(thread.data.thread)).toMatchSnapshot()
|
|
@@ -337,7 +428,12 @@ describe('pds thread views', () => {
|
|
|
337
428
|
it('blocks replies by record', async () => {
|
|
338
429
|
const threadPreTakedown = await agent.api.app.bsky.feed.getPostThread(
|
|
339
430
|
{ uri: sc.posts[alice][1].ref.uriStr },
|
|
340
|
-
{
|
|
431
|
+
{
|
|
432
|
+
headers: await network.serviceHeaders(
|
|
433
|
+
bob,
|
|
434
|
+
ids.AppBskyFeedGetPostThread,
|
|
435
|
+
),
|
|
436
|
+
},
|
|
341
437
|
)
|
|
342
438
|
const post1 = threadPreTakedown.data.thread.replies?.[0].post
|
|
343
439
|
const post2 = threadPreTakedown.data.thread.replies?.[1].replies[0].post
|
|
@@ -353,7 +449,12 @@ describe('pds thread views', () => {
|
|
|
353
449
|
// Same as deep post thread test, minus some replies
|
|
354
450
|
const thread = await agent.api.app.bsky.feed.getPostThread(
|
|
355
451
|
{ uri: sc.posts[alice][1].ref.uriStr },
|
|
356
|
-
{
|
|
452
|
+
{
|
|
453
|
+
headers: await network.serviceHeaders(
|
|
454
|
+
bob,
|
|
455
|
+
ids.AppBskyFeedGetPostThread,
|
|
456
|
+
),
|
|
457
|
+
},
|
|
357
458
|
)
|
|
358
459
|
|
|
359
460
|
expect(forSnapshot(thread.data.thread)).toMatchSnapshot()
|