diff options
Diffstat (limited to 'internal/subscriptions/subscriptions_test.go')
-rw-r--r-- | internal/subscriptions/subscriptions_test.go | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/internal/subscriptions/subscriptions_test.go b/internal/subscriptions/subscriptions_test.go index 1f6e437fb..6c47fed21 100644 --- a/internal/subscriptions/subscriptions_test.go +++ b/internal/subscriptions/subscriptions_test.go @@ -533,6 +533,138 @@ func (suite *SubscriptionsTestSuite) TestDomainBlocksWrongContentTypePlain() { suite.Equal(`fetch successful but parsed zero usable results`, permSub.Error) } +func (suite *SubscriptionsTestSuite) TestAdoption() { + var ( + ctx = context.Background() + testStructs = testrig.SetupTestStructs(rMediaPath, rTemplatePath) + testAccount = suite.testAccounts["admin_account"] + subscriptions = subscriptions.New( + testStructs.State, + testStructs.TransportController, + testStructs.TypeConverter, + ) + + // A subscription for a plain list + // of baddies, which adopts orphans. + testSubscription = >smodel.DomainPermissionSubscription{ + ID: "01JGE681TQSBPAV59GZXPKE62H", + Priority: 255, + Title: "whatever!", + PermissionType: gtsmodel.DomainPermissionBlock, + AsDraft: util.Ptr(false), + AdoptOrphans: util.Ptr(true), + CreatedByAccountID: testAccount.ID, + CreatedByAccount: testAccount, + URI: "https://lists.example.org/baddies.txt", + ContentType: gtsmodel.DomainPermSubContentTypePlain, + } + + // A lower-priority subscription + // than the one we're testing. + existingSubscription = >smodel.DomainPermissionSubscription{ + ID: "01JHX2ENFM8YGGR9Q9J5S66KSB", + Priority: 128, + Title: "lower prio subscription", + PermissionType: gtsmodel.DomainPermissionBlock, + AsDraft: util.Ptr(false), + AdoptOrphans: util.Ptr(false), + CreatedByAccountID: testAccount.ID, + CreatedByAccount: testAccount, + URI: "https://whatever.example.org/lowerprios.txt", + ContentType: gtsmodel.DomainPermSubContentTypePlain, + } + + // Orphan block which also exists + // on the list of testSubscription. + existingBlock1 = >smodel.DomainBlock{ + ID: "01JHX2V5WN250TKB6FQ1M3QE1H", + Domain: "bumfaces.net", + CreatedByAccount: testAccount, + CreatedByAccountID: testAccount.ID, + } + + // Block managed by existingSubscription which + // also exists on the list of testSubscription. + existingBlock2 = >smodel.DomainBlock{ + ID: "01JHX3EZAYG3KKC56C1YTKBRK7", + Domain: "peepee.poopoo", + CreatedByAccount: testAccount, + CreatedByAccountID: testAccount.ID, + SubscriptionID: existingSubscription.ID, + } + + // Already existing block + // managed by testSubscription. + existingBlock3 = >smodel.DomainBlock{ + ID: "01JHX3N1AGYT72BR3TWDCZKYGE", + Domain: "nothanks.com", + CreatedByAccount: testAccount, + CreatedByAccountID: testAccount.ID, + SubscriptionID: testSubscription.ID, + } + ) + defer testrig.TearDownTestStructs(testStructs) + + // Store test subscription. + if err := testStructs.State.DB.PutDomainPermissionSubscription( + ctx, testSubscription, + ); err != nil { + suite.FailNow(err.Error()) + } + + // Store the lower-priority subscription. + if err := testStructs.State.DB.PutDomainPermissionSubscription( + ctx, existingSubscription, + ); err != nil { + suite.FailNow(err.Error()) + } + + // Store the existing blocks. + for _, block := range []*gtsmodel.DomainBlock{ + existingBlock1, + existingBlock2, + existingBlock3, + } { + if err := testStructs.State.DB.CreateDomainBlock( + ctx, block, + ); err != nil { + suite.FailNow(err.Error()) + } + } + + // Process all subscriptions. + subscriptions.ProcessDomainPermissionSubscriptions(ctx, testSubscription.PermissionType) + + var err error + + // existingBlock1 should now be adopted by + // testSubscription, as it previously an orphan. + if existingBlock1, err = testStructs.State.DB.GetDomainBlockByID( + ctx, existingBlock1.ID, + ); err != nil { + suite.FailNow(err.Error()) + } + suite.Equal(testSubscription.ID, existingBlock1.SubscriptionID) + + // existingBlock2 should now be + // managed by testSubscription. + if existingBlock2, err = testStructs.State.DB.GetDomainBlockByID( + ctx, existingBlock2.ID, + ); err != nil { + suite.FailNow(err.Error()) + } + suite.Equal(testSubscription.ID, existingBlock2.SubscriptionID) + + // existingBlock3 should still be + // managed by testSubscription. + if existingBlock3, err = testStructs.State.DB.GetDomainBlockByID( + ctx, existingBlock3.ID, + ); err != nil { + suite.FailNow(err.Error()) + } + suite.Equal(testSubscription.ID, existingBlock3.SubscriptionID) +} + func TestSubscriptionTestSuite(t *testing.T) { suite.Run(t, new(SubscriptionsTestSuite)) } |