Skip to content

Commit

Permalink
Ensure db connections are reset
Browse files Browse the repository at this point in the history
  • Loading branch information
nanaya committed Jun 15, 2023
1 parent 1831e26 commit abe39d6
Show file tree
Hide file tree
Showing 4 changed files with 408 additions and 388 deletions.
345 changes: 173 additions & 172 deletions tests/Browser/SanityTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,44 +75,44 @@ private static function cleanup()
return;
}

(new static())->createApplication();
static::withDbAccess(function () {
// Tear down in reverse-order so that dependants get destroyed before their dependencies.
$nukingOrder = array_reverse(self::$scaffolding);

// Tear down in reverse-order so that dependants get destroyed before their dependencies.
$nukingOrder = array_reverse(self::$scaffolding);
foreach ($nukingOrder as $name => $scaffold) {
static::output("TEARDOWN: $name (".get_class($scaffold).")\n");

foreach ($nukingOrder as $name => $scaffold) {
static::output("TEARDOWN: $name (".get_class($scaffold).")\n");

if ($name === 'order' || $name === 'invoice') {
// we need to perform custom deletion for orders to bypass their immutability protections
Store\Order::withTrashed()->forceDelete();
} else {
$scaffold->forceDelete();
if ($name === 'order' || $name === 'invoice') {
// we need to perform custom deletion for orders to bypass their immutability protections
Store\Order::withTrashed()->forceDelete();
} else {
$scaffold->forceDelete();
}
}
}

// Clean up extra things that get created (i.e. as side-effects, etc)
Beatmap::truncate();
Beatmapset::truncate();
Channel::truncate();
Count::truncate();
AuthOption::truncate();
Authorize::truncate();
TopicTrack::truncate();
Genre::truncate();
Group::truncate();
Language::truncate();
LoginAttempt::truncate();
NewsPost::truncate();
Notification::truncate();
User::truncate();
UserGroup::truncate();
UserGroupEvent::truncate();
UserNotification::truncate();
UserProfileCustomization::truncate();
UserStatistics\Osu::truncate();

app('groups')->resetMemoized();
// Clean up extra things that get created (i.e. as side-effects, etc)
Beatmap::truncate();
Beatmapset::truncate();
Channel::truncate();
Count::truncate();
AuthOption::truncate();
Authorize::truncate();
TopicTrack::truncate();
Genre::truncate();
Group::truncate();
Language::truncate();
LoginAttempt::truncate();
NewsPost::truncate();
Notification::truncate();
User::truncate();
UserGroup::truncate();
UserGroupEvent::truncate();
UserNotification::truncate();
UserProfileCustomization::truncate();
UserStatistics\Osu::truncate();

app('groups')->resetMemoized();
});
}

private static function createScaffolding()
Expand All @@ -121,144 +121,145 @@ private static function createScaffolding()
return;
}

(new static())->createApplication();
self::$scaffolding['country'] = Country::first() ?? Country::factory()->create();
// user to login as and to use for requests
self::$scaffolding['user'] = User::factory()->create([
'country_acronym' => self::$scaffolding['country']->acronym,
]);

// factories for /beatmapsets/*
self::$scaffolding['beatmap_mirror'] = BeatmapMirror::factory()->create();
self::$scaffolding['genre'] = Genre::factory()->create();
self::$scaffolding['language'] = Language::factory()->create();
self::$scaffolding['beatmapset'] = Beatmapset::factory()->create([
'genre_id' => self::$scaffolding['genre'],
'language_id' => self::$scaffolding['language'],
'user_id' => self::$scaffolding['user'],
]);
self::$scaffolding['beatmap'] = Beatmap::factory()->create([
'beatmapset_id' => self::$scaffolding['beatmapset'],
]);
self::$scaffolding['beatmap_discussion'] = BeatmapDiscussion::factory()->create([
'beatmapset_id' => self::$scaffolding['beatmapset'],
'beatmap_id' => self::$scaffolding['beatmap'],
'user_id' => self::$scaffolding['user'],
]);
self::$scaffolding['beatmap_discussion_post'] = BeatmapDiscussionPost::factory()->timeline()->create([
'beatmap_discussion_id' => self::$scaffolding['beatmap_discussion'],
'user_id' => self::$scaffolding['user'],
]);
self::$scaffolding['beatmap_discussion_reply'] = BeatmapDiscussionPost::factory()->create([
'beatmap_discussion_id' => self::$scaffolding['beatmap_discussion'],
'user_id' => self::$scaffolding['user'],
]);
self::$scaffolding['pack'] = BeatmapPack::factory()->create();

// factories for /community/contests/*
self::$scaffolding['contest'] = Contest::factory()->entry()->create();

// factories for /community/tournaments/*
self::$scaffolding['tournament'] = Tournament::factory()->create();

// factories for /beatmaps/artists/*
self::$scaffolding['artist'] = Artist::factory()->create();
self::$scaffolding['track'] = ArtistTrack::factory()->create([
'artist_id' => self::$scaffolding['artist']->getKey(),
]);

// factories for /store/*
self::$scaffolding['product'] = Store\Product::factory()->masterTshirt()->create();
self::$scaffolding['order'] = Store\Order::factory()->checkout()->create([
'user_id' => self::$scaffolding['user'],
]);
self::$scaffolding['checkout'] = new ScaffoldDummy(self::$scaffolding['order']->getKey());
self::$scaffolding['invoice'] = Store\Order::factory()->paid()->create([
'user_id' => self::$scaffolding['user'],
]);

// factories for /community/forums/*
self::$scaffolding['forum_parent'] = Forum::factory()->closed()->create();
self::$scaffolding['forum'] = Forum::factory()->create([
'parent_id' => self::$scaffolding['forum_parent'],
]);
// satisfy group permissions required for posting in forum
self::$scaffolding['_group'] = app('groups')->byIdentifier('default');
self::$scaffolding['_forum_acl_post'] = Authorize::factory()->post()->create([
'forum_id' => self::$scaffolding['forum'],
'group_id' => self::$scaffolding['_group'],
]);
self::$scaffolding['_forum_acl_reply'] = Authorize::factory()->reply()->create([
'forum_id' => self::$scaffolding['forum'],
'group_id' => self::$scaffolding['_group'],
]);
self::$scaffolding['_user_group'] = UserGroup::first();

// satisfy minimum playcount for forum posting
UserStatistics\Osu::factory()->create([
'playcount' => config('osu.forum.minimum_plays'),
'user_id' => self::$scaffolding['user'],
]);

self::$scaffolding['topic'] = Topic::factory()->create([
'forum_id' => self::$scaffolding['forum'],
'topic_poster' => self::$scaffolding['user'],
]);
self::$scaffolding['post'] = Post::factory()->create([
'poster_id' => self::$scaffolding['user'],
'topic_id' => self::$scaffolding['topic'],
]);

// factories for /community/chat/*
self::$scaffolding['channel'] = Channel::factory()->type('public')->create();
self::$scaffolding['user_channel'] = UserChannel::factory()->create([
'channel_id' => self::$scaffolding['channel']->getKey(),
'user_id' => self::$scaffolding['user']->getKey(),
]);

// dummy for game mode param
self::$scaffolding['mode'] = new ScaffoldDummy('osu');

// factory for /seasons/*
self::$scaffolding['season'] = Season::factory()->create();

// factory for /home/changelog/*
self::$scaffolding['stream'] = UpdateStream::factory()->create();
self::$scaffolding['changelog'] = Changelog::factory()->create([
'stream_id' => self::$scaffolding['stream']->stream_id,
]);
self::$scaffolding['build'] = Build::factory()->create([
'stream_id' => self::$scaffolding['stream']->stream_id,
]);

// factory for /g/*
self::$scaffolding['group'] = Group::factory()->create();

// factory for comments
self::$scaffolding['comment'] = Comment::factory()->create([
'commentable_id' => self::$scaffolding['build'],
'commentable_type' => 'build',
'user_id' => self::$scaffolding['user'],
]);

// factory for matches
self::$scaffolding['match'] = LegacyMatch\LegacyMatch::factory()->create();
self::$scaffolding['event'] = LegacyMatch\Event::factory()->join()->create([
'match_id' => self::$scaffolding['match']->getKey(),
]);

// dummy for wiki page
self::$scaffolding['page'] = new ScaffoldDummy('Welcome');

// dummy for news
self::$scaffolding['news'] = new ScaffoldDummy('2014-06-21-meet-yuzu');

// score factory
self::$scaffolding['score'] = Score\Best\Osu::factory()->withReplay()->create();

self::$scaffolding['room'] = Room::factory()->create(['category' => 'spotlight']);

app('groups')->resetMemoized();
static::withDbAccess(function () {
self::$scaffolding['country'] = Country::first() ?? Country::factory()->create();
// user to login as and to use for requests
self::$scaffolding['user'] = User::factory()->create([
'country_acronym' => self::$scaffolding['country']->acronym,
]);

// factories for /beatmapsets/*
self::$scaffolding['beatmap_mirror'] = BeatmapMirror::factory()->create();
self::$scaffolding['genre'] = Genre::factory()->create();
self::$scaffolding['language'] = Language::factory()->create();
self::$scaffolding['beatmapset'] = Beatmapset::factory()->create([
'genre_id' => self::$scaffolding['genre'],
'language_id' => self::$scaffolding['language'],
'user_id' => self::$scaffolding['user'],
]);
self::$scaffolding['beatmap'] = Beatmap::factory()->create([
'beatmapset_id' => self::$scaffolding['beatmapset'],
]);
self::$scaffolding['beatmap_discussion'] = BeatmapDiscussion::factory()->create([
'beatmapset_id' => self::$scaffolding['beatmapset'],
'beatmap_id' => self::$scaffolding['beatmap'],
'user_id' => self::$scaffolding['user'],
]);
self::$scaffolding['beatmap_discussion_post'] = BeatmapDiscussionPost::factory()->timeline()->create([
'beatmap_discussion_id' => self::$scaffolding['beatmap_discussion'],
'user_id' => self::$scaffolding['user'],
]);
self::$scaffolding['beatmap_discussion_reply'] = BeatmapDiscussionPost::factory()->create([
'beatmap_discussion_id' => self::$scaffolding['beatmap_discussion'],
'user_id' => self::$scaffolding['user'],
]);
self::$scaffolding['pack'] = BeatmapPack::factory()->create();

// factories for /community/contests/*
self::$scaffolding['contest'] = Contest::factory()->entry()->create();

// factories for /community/tournaments/*
self::$scaffolding['tournament'] = Tournament::factory()->create();

// factories for /beatmaps/artists/*
self::$scaffolding['artist'] = Artist::factory()->create();
self::$scaffolding['track'] = ArtistTrack::factory()->create([
'artist_id' => self::$scaffolding['artist']->getKey(),
]);

// factories for /store/*
self::$scaffolding['product'] = Store\Product::factory()->masterTshirt()->create();
self::$scaffolding['order'] = Store\Order::factory()->checkout()->create([
'user_id' => self::$scaffolding['user'],
]);
self::$scaffolding['checkout'] = new ScaffoldDummy(self::$scaffolding['order']->getKey());
self::$scaffolding['invoice'] = Store\Order::factory()->paid()->create([
'user_id' => self::$scaffolding['user'],
]);

// factories for /community/forums/*
self::$scaffolding['forum_parent'] = Forum::factory()->closed()->create();
self::$scaffolding['forum'] = Forum::factory()->create([
'parent_id' => self::$scaffolding['forum_parent'],
]);
// satisfy group permissions required for posting in forum
self::$scaffolding['_group'] = app('groups')->byIdentifier('default');
self::$scaffolding['_forum_acl_post'] = Authorize::factory()->post()->create([
'forum_id' => self::$scaffolding['forum'],
'group_id' => self::$scaffolding['_group'],
]);
self::$scaffolding['_forum_acl_reply'] = Authorize::factory()->reply()->create([
'forum_id' => self::$scaffolding['forum'],
'group_id' => self::$scaffolding['_group'],
]);
self::$scaffolding['_user_group'] = UserGroup::first();

// satisfy minimum playcount for forum posting
UserStatistics\Osu::factory()->create([
'playcount' => config('osu.forum.minimum_plays'),
'user_id' => self::$scaffolding['user'],
]);

self::$scaffolding['topic'] = Topic::factory()->create([
'forum_id' => self::$scaffolding['forum'],
'topic_poster' => self::$scaffolding['user'],
]);
self::$scaffolding['post'] = Post::factory()->create([
'poster_id' => self::$scaffolding['user'],
'topic_id' => self::$scaffolding['topic'],
]);

// factories for /community/chat/*
self::$scaffolding['channel'] = Channel::factory()->type('public')->create();
self::$scaffolding['user_channel'] = UserChannel::factory()->create([
'channel_id' => self::$scaffolding['channel']->getKey(),
'user_id' => self::$scaffolding['user']->getKey(),
]);

// dummy for game mode param
self::$scaffolding['mode'] = new ScaffoldDummy('osu');

// factory for /seasons/*
self::$scaffolding['season'] = Season::factory()->create();

// factory for /home/changelog/*
self::$scaffolding['stream'] = UpdateStream::factory()->create();
self::$scaffolding['changelog'] = Changelog::factory()->create([
'stream_id' => self::$scaffolding['stream']->stream_id,
]);
self::$scaffolding['build'] = Build::factory()->create([
'stream_id' => self::$scaffolding['stream']->stream_id,
]);

// factory for /g/*
self::$scaffolding['group'] = Group::factory()->create();

// factory for comments
self::$scaffolding['comment'] = Comment::factory()->create([
'commentable_id' => self::$scaffolding['build'],
'commentable_type' => 'build',
'user_id' => self::$scaffolding['user'],
]);

// factory for matches
self::$scaffolding['match'] = LegacyMatch\LegacyMatch::factory()->create();
self::$scaffolding['event'] = LegacyMatch\Event::factory()->join()->create([
'match_id' => self::$scaffolding['match']->getKey(),
]);

// dummy for wiki page
self::$scaffolding['page'] = new ScaffoldDummy('Welcome');

// dummy for news
self::$scaffolding['news'] = new ScaffoldDummy('2014-06-21-meet-yuzu');

// score factory
self::$scaffolding['score'] = Score\Best\Osu::factory()->withReplay()->create();

self::$scaffolding['room'] = Room::factory()->create(['category' => 'spotlight']);

app('groups')->resetMemoized();
});
}

private static function filterLog(array $log)
Expand Down
Loading

0 comments on commit abe39d6

Please sign in to comment.