refactor: tests use premade json files to test against.

Signed-off-by: SoXX <soxx@fenpa.ws>
This commit is contained in:
SoXX 2023-10-24 16:28:24 +02:00
parent 7c0765bd3b
commit babbf48192
18 changed files with 16244 additions and 406 deletions

1
.gitignore vendored
View File

@ -189,3 +189,4 @@ $RECYCLE.BIN/
*.lnk
# End of https://www.toptal.com/developers/gitignore/api/windows,linux,goland+all,macos,go
/.scannerwork/

View File

@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="go test e621-sdk-go (endpoints)" type="GoTestRunConfiguration" factoryName="Go Test">
<module name="e621-sdk-go" />
<working_directory value="$PROJECT_DIR$" />
<kind value="DIRECTORY" />
<package value="git.dragse.it/anthrove/e621-sdk-go" />
<directory value="$PROJECT_DIR$/pkg/e621/endpoints" />
<filePath value="$PROJECT_DIR$" />
<framework value="gotest" />
<method v="2" />
</configuration>
</component>

View File

@ -11,28 +11,18 @@ func TestGetNote(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
noteResponse := model.Note{
ID: 385777,
CreatedAt: "2023-10-19T06:42:20.171-04:00",
UpdatedAt: "2023-10-19T06:42:20.171-04:00",
CreatorID: 1472475,
X: 277,
Y: 841,
Width: 101,
Height: 176,
Version: 2,
IsActive: true,
PostID: 2624329,
Body: "Well, isnt it just right to use them?",
CreatorName: "ponypussypounder",
}
jsonResponser, err := httpmock.NewJsonResponder(200, noteResponse)
response, err := loadJsonTestData[model.Note]("../../../tests/note.json")
if err != nil {
t.Error(err)
return
}
httpmock.RegisterResponder("GET", "https://e621.net/notes/36957.json", jsonResponser)
responder, err := httpmock.NewJsonResponder(200, response)
if err != nil {
t.Error(err)
return
}
httpmock.RegisterResponder("GET", "https://e621.net/notes/1337.json", responder)
requestContext := model.RequestContext{
Client: http.Client{},
@ -42,17 +32,17 @@ func TestGetNote(t *testing.T) {
APIKey: "123456",
}
pool, err := GetNote(requestContext, "36957")
pool, err := GetNote(requestContext, "1337")
if err != nil {
t.Error(err)
return
}
if pool.ID == noteResponse.ID && pool.Body == noteResponse.Body {
if pool.ID == response.ID && pool.Body == response.Body {
return
}
t.Errorf("Respons did not match mock data:\nOriginal: %v\nMock: %v", pool, noteResponse)
t.Errorf("Respons did not match mock data:\nOriginal: %v\nMock: %v", pool, response)
}
@ -60,60 +50,18 @@ func TestGetNotes(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
noteResponse := []model.Note{
{
ID: 385777,
CreatedAt: "2023-10-19T06:42:20.171-04:00",
UpdatedAt: "2023-10-19T06:42:20.171-04:00",
CreatorID: 1472475,
X: 277,
Y: 841,
Width: 101,
Height: 176,
Version: 2,
IsActive: true,
PostID: 2624329,
Body: "Well, isnt it just right to use them?",
CreatorName: "ponypussypounder",
},
{
ID: 56782,
CreatedAt: "2023-10-19T06:42:20.171-04:00",
UpdatedAt: "2023-10-19T06:42:20.171-04:00",
CreatorID: 1472475,
X: 277,
Y: 841,
Width: 101,
Height: 176,
Version: 2,
IsActive: true,
PostID: 2624329,
Body: "Well, isnt it just right to use them?",
CreatorName: "ponypussypounder",
},
{
ID: 43847234,
CreatedAt: "2023-10-19T06:42:20.171-04:00",
UpdatedAt: "2023-10-19T06:42:20.171-04:00",
CreatorID: 1472475,
X: 277,
Y: 841,
Width: 101,
Height: 176,
Version: 2,
IsActive: true,
PostID: 2624329,
Body: "Well, isnt it just right to use them?",
CreatorName: "ponypussypounder",
},
}
jsonResponser, err := httpmock.NewJsonResponder(200, noteResponse)
response, err := loadJsonTestData[[]model.Note]("../../../tests/notes.json")
if err != nil {
t.Error(err)
return
}
httpmock.RegisterResponder("GET", "https://e621.net/notes.json", jsonResponser)
responder, err := httpmock.NewJsonResponder(200, response)
if err != nil {
t.Error(err)
return
}
httpmock.RegisterResponder("GET", "https://e621.net/notes.json", responder)
requestContext := model.RequestContext{
Client: http.Client{},
@ -129,10 +77,10 @@ func TestGetNotes(t *testing.T) {
return
}
if len(pools) == 3 && pools[0].ID == noteResponse[0].ID && pools[1].Body == noteResponse[1].Body && pools[2].UpdatedAt == noteResponse[2].UpdatedAt {
if pools[0].ID == response[0].ID && pools[1].Body == response[1].Body && pools[2].UpdatedAt == response[2].UpdatedAt {
return
}
t.Errorf("Respons did not match mock data:\nOriginal: %v\nMock: %v", pools, noteResponse)
t.Errorf("Respons did not match mock data:\nOriginal: %v\nMock: %v", pools, response)
}

View File

@ -11,26 +11,18 @@ func TestGetPool(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
poolResponse := model.Pool{
ID: 36957,
Name: "MLP:His_Nocturnal_Excellency",
CreatedAt: "2023-10-13T19:24:00.576-04:00",
UpdatedAt: "2023-10-19T07:46:00.267-04:00",
CreatorID: 16883,
Description: "Two (un)lucky royal guards who saw something they didnt have to~",
IsActive: true,
Category: "series",
PostIDS: nil,
CreatorName: "2DUK",
PostCount: 11,
}
jsonResponser, err := httpmock.NewJsonResponder(200, poolResponse)
response, err := loadJsonTestData[model.Pool]("../../../tests/pool.json")
if err != nil {
t.Error(err)
return
}
httpmock.RegisterResponder("GET", "https://e621.net/pools/36957.json", jsonResponser)
responder, err := httpmock.NewJsonResponder(200, response)
if err != nil {
t.Error(err)
return
}
httpmock.RegisterResponder("GET", "https://e621.net/pools/36957.json", responder)
requestContext := model.RequestContext{
Client: http.Client{},
@ -46,11 +38,11 @@ func TestGetPool(t *testing.T) {
return
}
if pool.ID == poolResponse.ID && pool.Name == poolResponse.Name {
if pool.ID == response.ID && pool.Name == response.Name {
return
}
t.Errorf("Respons did not match mock data:\nOriginal: %v\nMock: %v", pool, poolResponse)
t.Errorf("Respons did not match mock data:\nOriginal: %v\nMock: %v", pool, response)
}
@ -58,67 +50,18 @@ func TestGetPools(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
poolResponse := []model.Pool{
{
ID: 36957,
Name: "MLP:His_Nocturnal_Excellency",
CreatedAt: "2023-10-13T19:24:00.576-04:00",
UpdatedAt: "2023-10-19T07:46:00.267-04:00",
CreatorID: 16883,
Description: "Two (un)lucky royal guards who saw something they didnt have to~",
IsActive: true,
Category: "series",
PostIDS: nil,
CreatorName: "2DUK",
PostCount: 11,
},
{
ID: 5772,
Name: "MLP:His_Nocturnal_Excellency",
CreatedAt: "2023-10-13T19:24:00.576-04:00",
UpdatedAt: "2023-10-19T07:46:00.267-04:00",
CreatorID: 16883,
Description: "Two (un)lucky royal guards who saw something they didnt have to~",
IsActive: true,
Category: "series",
PostIDS: nil,
CreatorName: "2DUK",
PostCount: 11,
},
{
ID: 453687,
Name: "MLP:His_Nocturnal_Excellency",
CreatedAt: "2023-10-13T19:24:00.576-04:00",
UpdatedAt: "2023-10-19T07:46:00.267-04:00",
CreatorID: 16883,
Description: "Two (un)lucky royal guards who saw something they didnt have to~",
IsActive: true,
Category: "series",
PostIDS: nil,
CreatorName: "2DUK",
PostCount: 11,
},
{
ID: 3456876,
Name: "MLP:His_Nocturnal_Excellency",
CreatedAt: "2023-10-13T19:24:00.576-04:00",
UpdatedAt: "2023-10-19T07:46:00.267-04:00",
CreatorID: 16883,
Description: "Two (un)lucky royal guards who saw something they didnt have to~",
IsActive: true,
Category: "series",
PostIDS: nil,
CreatorName: "2DUK",
PostCount: 11,
},
}
jsonResponser, err := httpmock.NewJsonResponder(200, poolResponse)
response, err := loadJsonTestData[[]model.Pool]("../../../tests/pools.json")
if err != nil {
t.Error(err)
return
}
httpmock.RegisterResponder("GET", "https://e621.net/pools.json", jsonResponser)
responder, err := httpmock.NewJsonResponder(200, response)
if err != nil {
t.Error(err)
return
}
httpmock.RegisterResponder("GET", "https://e621.net/pools.json", responder)
requestContext := model.RequestContext{
Client: http.Client{},
@ -134,10 +77,10 @@ func TestGetPools(t *testing.T) {
return
}
if len(pools) == 4 && pools[0].ID == poolResponse[0].ID && pools[1].Name == poolResponse[1].Name && pools[2].UpdatedAt == poolResponse[2].UpdatedAt {
if pools[0].ID == response[0].ID && pools[1].Name == response[1].Name && pools[2].UpdatedAt == response[2].UpdatedAt {
return
}
t.Errorf("Respons did not match mock data:\nOriginal: %v\nMock: %v", pools, poolResponse)
t.Errorf("Respons did not match mock data:\nOriginal: %v\nMock: %v", pools, response)
}

View File

@ -11,48 +11,23 @@ func TestGetPost(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
postResponse := model.PostResponse{
Post: model.Post{
ID: 658415636580,
CreatedAt: "2023-10-15T03:58:27.272-04:00",
UpdatedAt: "2023-10-19T02:47:33.597-04:00",
File: model.File{
Width: 759,
Height: 980,
EXT: "jpg",
Size: 640942,
Md5: "36e229e910638c7aebe65a500f16f3ee",
URL: "https://static1.e621.net/data/36/e2/36e229e910638c7aebe65a500f16f3ee.jpg",
},
Preview: model.Preview{},
Sample: model.Sample{},
Score: model.Score{},
Tags: model.Tags{},
LockedTags: nil,
ChangeSeq: 0,
Flags: model.Flags{},
Rating: "",
FavCount: 0,
Sources: nil,
Pools: nil,
Relationships: model.Relationships{},
ApproverID: nil,
UploaderID: 0,
Description: "",
CommentCount: 0,
IsFavorited: false,
HasNotes: false,
Duration: nil,
},
Posts: nil,
}
jsonResponser, err := httpmock.NewJsonResponder(200, postResponse)
data, err := loadJsonTestData[model.Post]("../../../tests/post.json")
if err != nil {
t.Error(err)
return
}
httpmock.RegisterResponder("GET", "https://e621.net/posts/658415636580.json", jsonResponser)
response := model.PostResponse{
Post: data,
Posts: nil,
}
responder, err := httpmock.NewJsonResponder(200, response)
if err != nil {
t.Error(err)
return
}
httpmock.RegisterResponder("GET", "https://e621.net/posts/1337.json", responder)
requestContext := model.RequestContext{
Client: http.Client{},
@ -62,17 +37,17 @@ func TestGetPost(t *testing.T) {
APIKey: "123456",
}
post, err := GetPost(requestContext, "658415636580")
post, err := GetPost(requestContext, "1337")
if err != nil {
t.Error(err)
return
}
if post.ID == postResponse.Post.ID && post.File.URL == postResponse.Post.File.URL {
if post.ID == response.Post.ID && post.File.URL == response.Post.File.URL {
return
}
t.Errorf("Respons did not match mock data:\nOriginal: %v\nMock: %v", post, postResponse)
t.Errorf("Respons did not match mock data:\nOriginal: %v\nMock: %v", post, response)
}
@ -80,114 +55,18 @@ func TestGetPosts(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
postResponse := model.PostResponse{
Post: model.Post{},
Posts: []model.Post{
{
ID: 658415636580,
CreatedAt: "2023-10-15T03:58:27.272-04:00",
UpdatedAt: "2023-10-19T02:47:33.597-04:00",
File: model.File{
Width: 759,
Height: 980,
EXT: "jpg",
Size: 640942,
Md5: "36e229e910638c7aebe65a500f16f3ee",
URL: "https://static1.e621.net/data/36/e2/36e229e910638c7aebe65a500f16f3ee.jpg",
},
Preview: model.Preview{},
Sample: model.Sample{},
Score: model.Score{},
Tags: model.Tags{},
LockedTags: nil,
ChangeSeq: 0,
Flags: model.Flags{},
Rating: "",
FavCount: 0,
Sources: nil,
Pools: nil,
Relationships: model.Relationships{},
ApproverID: nil,
UploaderID: 0,
Description: "",
CommentCount: 0,
IsFavorited: false,
HasNotes: false,
Duration: nil,
},
{
ID: 698418695,
CreatedAt: "2023-10-15T03:58:27.272-04:00",
UpdatedAt: "2023-10-19T02:47:33.597-04:00",
File: model.File{
Width: 759,
Height: 980,
EXT: "jpg",
Size: 640942,
Md5: "36e229e910638c7aebe65a500f16f3ee",
URL: "https://static1.e621.net/data/36/e2/36e229e910638c7aebe65a500f16f3ee.jpg",
},
Preview: model.Preview{},
Sample: model.Sample{},
Score: model.Score{},
Tags: model.Tags{},
LockedTags: nil,
ChangeSeq: 0,
Flags: model.Flags{},
Rating: "",
FavCount: 0,
Sources: nil,
Pools: nil,
Relationships: model.Relationships{},
ApproverID: nil,
UploaderID: 0,
Description: "",
CommentCount: 0,
IsFavorited: false,
HasNotes: false,
Duration: nil,
},
{
ID: 48976516894,
CreatedAt: "2023-10-15T03:58:27.272-04:00",
UpdatedAt: "2023-10-19T02:47:33.597-04:00",
File: model.File{
Width: 759,
Height: 980,
EXT: "jpg",
Size: 640942,
Md5: "36e229e910638c7aebe65a500f16f3ee",
URL: "https://static1.e621.net/data/36/e2/36e229e910638c7aebe65a500f16f3ee.jpg",
},
Preview: model.Preview{},
Sample: model.Sample{},
Score: model.Score{},
Tags: model.Tags{},
LockedTags: nil,
ChangeSeq: 0,
Flags: model.Flags{},
Rating: "",
FavCount: 0,
Sources: nil,
Pools: nil,
Relationships: model.Relationships{},
ApproverID: nil,
UploaderID: 0,
Description: "",
CommentCount: 0,
IsFavorited: false,
HasNotes: false,
Duration: nil,
},
},
}
jsonResponser, err := httpmock.NewJsonResponder(200, postResponse)
response, err := loadJsonTestData[model.PostResponse]("../../../tests/posts.json")
if err != nil {
t.Error(err)
return
}
httpmock.RegisterResponder("GET", "https://e621.net/posts.json", jsonResponser)
responder, err := httpmock.NewJsonResponder(200, response)
if err != nil {
t.Error(err)
return
}
httpmock.RegisterResponder("GET", "https://e621.net/posts.json", responder)
requestContext := model.RequestContext{
Client: http.Client{},
@ -203,10 +82,10 @@ func TestGetPosts(t *testing.T) {
return
}
if len(posts) == 3 && posts[0].ID == postResponse.Posts[0].ID && posts[1].File.Md5 == postResponse.Posts[1].File.Md5 && posts[2].File.EXT == postResponse.Posts[2].File.EXT {
if posts[0].ID == response.Posts[0].ID && posts[1].File.Md5 == response.Posts[1].File.Md5 && posts[2].File.EXT == response.Posts[2].File.EXT {
return
}
t.Errorf("Respons did not match mock data:\nOriginal: %v\nMock: %v", posts, postResponse)
t.Errorf("Respons did not match mock data:\nOriginal: %v\nMock: %v", posts, response)
}

View File

@ -11,24 +11,18 @@ func TestGetTag(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
tagResponse := model.Tag{
ID: 165165,
Name: "35ad13",
PostCount: 59,
RelatedTags: "[]",
RelatedTagsUpdatedAt: "2023-10-16T07:58:15.897+02:00",
Category: 0,
IsLocked: false,
CreatedAt: "2023-10-16T07:58:15.917+02:00",
UpdatedAt: "2023-10-16T07:58:23.310+02:00",
}
jsonResponser, err := httpmock.NewJsonResponder(200, tagResponse)
response, err := loadJsonTestData[model.Tag]("../../../tests/tag.json")
if err != nil {
t.Error(err)
return
}
httpmock.RegisterResponder("GET", "https://e621.net/tags/165165.json", jsonResponser)
responder, err := httpmock.NewJsonResponder(200, response)
if err != nil {
t.Error(err)
return
}
httpmock.RegisterResponder("GET", "https://e621.net/tags/165165.json", responder)
requestContext := model.RequestContext{
Client: http.Client{},
@ -44,10 +38,10 @@ func TestGetTag(t *testing.T) {
return
}
if tag.ID == tagResponse.ID && tag.Name == tagResponse.Name && tag.CreatedAt == tagResponse.CreatedAt {
if tag.ID == response.ID && tag.Name == response.Name && tag.CreatedAt == response.CreatedAt {
return
}
t.Errorf("Respons did not match mock data:\nOriginal: %v\nMock: %v", tag, tagResponse)
t.Errorf("Respons did not match mock data:\nOriginal: %v\nMock: %v", tag, response)
}

View File

@ -11,39 +11,18 @@ func TestGetUser(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
userResponse := model.User{
WikiPageVersionCount: 0,
ArtistVersionCount: 0,
PoolVersionCount: 0,
ForumPostCount: 0,
CommentCount: 69,
FlagCount: 0,
FavoriteCount: 1337,
PositiveFeedbackCount: 0,
NeutralFeedbackCount: 0,
NegativeFeedbackCount: 0,
UploadLimit: 0,
ID: 1,
CreatedAt: "2020-04-07T07:16:40.286+02:00",
Name: "MaxMustermannDer69ste",
Level: 0,
BaseUploadLimit: 0,
PostUploadCount: 0,
PostUpdateCount: 0,
NoteUpdateCount: 0,
IsBanned: false,
CanApprovePosts: false,
CanUploadFree: false,
LevelString: "Member",
AvatarID: 7,
}
jsonResponser, err := httpmock.NewJsonResponder(200, userResponse)
response, err := loadJsonTestData[model.User]("../../../tests/user.json")
if err != nil {
t.Error(err)
return
}
httpmock.RegisterResponder("GET", "https://e621.net/users/MaxMustermannDer69ste.json", jsonResponser)
responder, err := httpmock.NewJsonResponder(200, response)
if err != nil {
t.Error(err)
return
}
httpmock.RegisterResponder("GET", "https://e621.net/users/selloo.json", responder)
requestContext := model.RequestContext{
Client: http.Client{},
@ -53,17 +32,17 @@ func TestGetUser(t *testing.T) {
APIKey: "123456",
}
user, err := GetUser(requestContext, "MaxMustermannDer69ste")
user, err := GetUser(requestContext, "selloo")
if err != nil {
t.Error(err)
return
}
if user.ID == userResponse.ID && user.Name == userResponse.Name && user.CreatedAt == userResponse.CreatedAt {
if user.ID == response.ID && user.Name == response.Name && user.CreatedAt == response.CreatedAt {
return
}
t.Errorf("Respons did not match mock data:\nOriginal: %v\nMock: %v", user, userResponse)
t.Errorf("Respons did not match mock data:\nOriginal: %v\nMock: %v", user, response)
}
@ -71,68 +50,18 @@ func TestGetUsers(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
userResponse := []model.User{
{
WikiPageVersionCount: 0,
ArtistVersionCount: 0,
PoolVersionCount: 0,
ForumPostCount: 0,
CommentCount: 69,
FlagCount: 0,
FavoriteCount: 1337,
PositiveFeedbackCount: 0,
NeutralFeedbackCount: 0,
NegativeFeedbackCount: 0,
UploadLimit: 0,
ID: 1,
CreatedAt: "2020-04-07T07:16:40.286+02:00",
Name: "MaxMustermannDer69ste",
Level: 0,
BaseUploadLimit: 0,
PostUploadCount: 0,
PostUpdateCount: 0,
NoteUpdateCount: 0,
IsBanned: false,
CanApprovePosts: false,
CanUploadFree: false,
LevelString: "Member",
AvatarID: 7,
},
{
WikiPageVersionCount: 0,
ArtistVersionCount: 0,
PoolVersionCount: 0,
ForumPostCount: 0,
CommentCount: 1337,
FlagCount: 0,
FavoriteCount: 69,
PositiveFeedbackCount: 0,
NeutralFeedbackCount: 0,
NegativeFeedbackCount: 0,
UploadLimit: 0,
ID: 1,
CreatedAt: "2020-04-08T07:16:40.286+02:00",
Name: "HollaDieWaldfee",
Level: 0,
BaseUploadLimit: 0,
PostUploadCount: 0,
PostUpdateCount: 0,
NoteUpdateCount: 0,
IsBanned: false,
CanApprovePosts: false,
CanUploadFree: false,
LevelString: "Member",
AvatarID: 16,
},
}
jsonResponser, err := httpmock.NewJsonResponder(200, userResponse)
response, err := loadJsonTestData[[]model.User]("../../../tests/users.json")
if err != nil {
t.Error(err)
return
}
httpmock.RegisterResponder("GET", "https://e621.net/users.json", jsonResponser)
responder, err := httpmock.NewJsonResponder(200, response)
if err != nil {
t.Error(err)
return
}
httpmock.RegisterResponder("GET", "https://e621.net/users.json", responder)
requestContext := model.RequestContext{
Client: http.Client{},
@ -148,10 +77,10 @@ func TestGetUsers(t *testing.T) {
return
}
if len(user) == 2 && user[0].ID == userResponse[0].ID && user[1].Name == userResponse[1].Name {
if user[0].ID == response[0].ID && user[1].Name == response[1].Name {
return
}
t.Errorf("Respons did not match mock data:\nOriginal: %v\nMock: %v", user, userResponse)
t.Errorf("Respons did not match mock data:\nOriginal: %v\nMock: %v", user, response)
}

View File

@ -0,0 +1,28 @@
package endpoints
import (
"encoding/json"
"os"
)
func loadJsonTestData[T any](testDataPath string) (T, error) {
// Create a variable to store the decoded JSON data
var jsonData T
// Open the JSON file
file, err := os.Open(testDataPath)
if err != nil {
return jsonData, err
}
defer file.Close()
// Create a decoder
decoder := json.NewDecoder(file)
// Decode the JSON data into the struct
if err := decoder.Decode(&jsonData); err != nil {
return jsonData, err
}
return jsonData, nil
}

15
tests/note.json Normal file
View File

@ -0,0 +1,15 @@
{
"id": 1337,
"created_at": "2009-05-19T13:30:28.360-04:00",
"updated_at": "2009-06-02T16:52:06.418-04:00",
"creator_id": 2942,
"x": 163,
"y": 718,
"width": 99,
"height": 47,
"version": 2,
"is_active": false,
"post_id": 31570,
"body": "BORANGE MORE LIKE IT",
"creator_name": "DahWuffie"
}

1127
tests/notes.json Normal file

File diff suppressed because it is too large Load Diff

38
tests/pool.json Normal file
View File

@ -0,0 +1,38 @@
{
"id": 1,
"name": "Furry_Boys_by_Trump/Team_Shuffle",
"created_at": "2008-10-30T03:42:29.962-04:00",
"updated_at": "2023-10-24T06:58:59.488-04:00",
"creator_id": 7,
"description": "Furry Boys Comic",
"is_active": false,
"category": "series",
"post_ids": [
3294,
3295,
3296,
3297,
3298,
3299,
3300,
3303,
3306,
3304,
3305,
3307,
3309,
3308,
3313,
3312,
3316,
3314,
3315,
3321,
3317,
3319,
3318,
3320
],
"creator_name": "user_7",
"post_count": 24
}

4002
tests/pools.json Normal file

File diff suppressed because it is too large Load Diff

111
tests/post.json Normal file
View File

@ -0,0 +1,111 @@
{
"post": {
"id": 1337,
"created_at": "2007-02-23T22:14:42.048-05:00",
"updated_at": "2023-10-20T01:59:09.423-04:00",
"file": {
"width": 790,
"height": 748,
"ext": "jpg",
"size": 156917,
"md5": "4e7586f0666a7c735b2f9e1ccd18bc68",
"url": "https://static1.e621.net/data/4e/75/4e7586f0666a7c735b2f9e1ccd18bc68.jpg"
},
"preview": {
"width": 150,
"height": 142,
"url": "https://static1.e621.net/data/preview/4e/75/4e7586f0666a7c735b2f9e1ccd18bc68.jpg"
},
"sample": {
"has": false,
"height": 748,
"width": 790,
"url": "https://static1.e621.net/data/4e/75/4e7586f0666a7c735b2f9e1ccd18bc68.jpg",
"alternates": {}
},
"score": {
"up": 46,
"down": -4,
"total": 42
},
"tags": {
"general": [
"\u003c3",
"anthro",
"blush",
"bottomwear",
"briefs",
"chibi",
"clothed",
"clothing",
"dialogue",
"ear_piercing",
"footwear",
"funny_post_number",
"fur",
"group",
"hair",
"humor",
"legwear",
"male",
"pants",
"piercing",
"pink_hair",
"reluctant",
"shirt",
"simple_background",
"socks",
"text",
"topless",
"topwear",
"underwear"
],
"artist": [
"sneakerfox"
],
"copyright": [],
"character": [],
"species": [
"canid",
"canine",
"fox",
"mammal",
"mephitid",
"skunk"
],
"invalid": [],
"meta": [
"2003",
"english_text"
],
"lore": []
},
"locked_tags": [],
"change_seq": 42512291,
"flags": {
"pending": false,
"flagged": false,
"note_locked": false,
"status_locked": false,
"rating_locked": false,
"deleted": false
},
"rating": "s",
"fav_count": 84,
"sources": [],
"pools": [],
"relationships": {
"parent_id": null,
"has_children": false,
"has_active_children": false,
"children": []
},
"approver_id": null,
"uploader_id": 17633,
"description": "",
"comment_count": 6,
"is_favorited": false,
"has_notes": false,
"duration": null
}
}

8820
tests/posts.json Normal file

File diff suppressed because it is too large Load Diff

11
tests/tag.json Normal file
View File

@ -0,0 +1,11 @@
{
"id": 1337,
"name": "clothed",
"post_count": 945399,
"related_tags": "clothed 300 clothing 300 mammal 255 anthro 242 female 200 hi_res 197 solo 154 breasts 153 hair 152 male 140 fur 121 duo 102 genitals 101 digital_media_(artwork) 97 canid 88 topwear 88 bodily_fluids 87 text 86 canine 84 simple_background 82 big_breasts 79 smile 79 open_mouth 76 tail 76 felid 75",
"related_tags_updated_at": "2023-10-04T15:01:19.597-04:00",
"category": 0,
"is_locked": false,
"created_at": "2020-03-05T05:49:37.994-05:00",
"updated_at": "2023-10-04T15:01:19.598-04:00"
}

827
tests/tags.json Normal file
View File

@ -0,0 +1,827 @@
[
{
"id": 1251286,
"name": "ayre_(armored_core)",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T09:29:25.610-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T09:29:27.171-04:00",
"updated_at": "2023-10-24T09:29:27.171-04:00"
},
{
"id": 1251285,
"name": "621_(armored_core)",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T09:29:25.610-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T09:29:27.162-04:00",
"updated_at": "2023-10-24T09:29:27.162-04:00"
},
{
"id": 1251283,
"name": "thatguywithabadattitude",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T09:23:37.329-04:00",
"category": 1,
"is_locked": false,
"created_at": "2023-10-24T09:23:38.656-04:00",
"updated_at": "2023-10-24T09:23:51.716-04:00"
},
{
"id": 1251282,
"name": "hamantha_(jack_stauber)",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T09:23:37.329-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T09:23:38.647-04:00",
"updated_at": "2023-10-24T09:23:44.770-04:00"
},
{
"id": 1251281,
"name": "artist_rayminonfox",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T09:14:50.934-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T09:14:53.598-04:00",
"updated_at": "2023-10-24T09:14:53.598-04:00"
},
{
"id": 1251280,
"name": "kminsi21",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T09:04:08.935-04:00",
"category": 1,
"is_locked": false,
"created_at": "2023-10-24T09:04:12.868-04:00",
"updated_at": "2023-10-24T09:04:12.868-04:00"
},
{
"id": 1251279,
"name": "mori_(thetomereborn)",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T08:54:06.887-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T08:54:06.910-04:00",
"updated_at": "2023-10-24T08:54:20.520-04:00"
},
{
"id": 1251278,
"name": "rbxgemini",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T08:26:26.437-04:00",
"category": 1,
"is_locked": false,
"created_at": "2023-10-24T08:26:26.869-04:00",
"updated_at": "2023-10-24T08:28:55.655-04:00"
},
{
"id": 1251275,
"name": "miss_m",
"post_count": 10,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T07:54:40.845-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T07:54:40.872-04:00",
"updated_at": "2023-10-24T07:54:53.333-04:00"
},
{
"id": 1251274,
"name": "sauna_(vorelover203)",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T07:49:44.945-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T07:49:44.975-04:00",
"updated_at": "2023-10-24T07:49:53.215-04:00"
},
{
"id": 1251273,
"name": "critterstew",
"post_count": 10,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T07:47:01.742-04:00",
"category": 1,
"is_locked": false,
"created_at": "2023-10-24T07:47:04.951-04:00",
"updated_at": "2023-10-24T07:47:04.951-04:00"
},
{
"id": 1251272,
"name": "margo_(g4bby)",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T07:38:58.883-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T07:39:00.096-04:00",
"updated_at": "2023-10-24T07:39:00.096-04:00"
},
{
"id": 1251271,
"name": "lemon_(lewdchuu)",
"post_count": 6,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T07:32:40.389-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T07:32:41.621-04:00",
"updated_at": "2023-10-24T07:32:49.273-04:00"
},
{
"id": 1251270,
"name": "bg3",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T07:27:49.080-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T07:27:50.484-04:00",
"updated_at": "2023-10-24T07:27:50.484-04:00"
},
{
"id": 1251269,
"name": "tail_in_paw",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T06:41:39.634-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T06:41:39.670-04:00",
"updated_at": "2023-10-24T06:41:39.670-04:00"
},
{
"id": 1251268,
"name": "tail_in_own_paw",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T06:41:39.634-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T06:41:39.667-04:00",
"updated_at": "2023-10-24T06:41:39.667-04:00"
},
{
"id": 1251267,
"name": "tail_in_own_hand",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T06:41:39.634-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T06:41:39.656-04:00",
"updated_at": "2023-10-24T06:41:39.656-04:00"
},
{
"id": 1251265,
"name": "sorrelkit_(warriors)",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T06:38:09.807-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T06:38:09.868-04:00",
"updated_at": "2023-10-24T06:38:09.868-04:00"
},
{
"id": 1251264,
"name": "mr_o_(bebebebebe)",
"post_count": 9,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T06:11:42.600-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T06:11:42.629-04:00",
"updated_at": "2023-10-24T09:05:19.594-04:00"
},
{
"id": 1251263,
"name": "pregnancy_risk_kink",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T06:03:51.859-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T06:03:51.883-04:00",
"updated_at": "2023-10-24T06:03:51.883-04:00"
},
{
"id": 1251262,
"name": "wasp_trooper_(bug_fables)",
"post_count": 3,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T05:53:31.291-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T05:53:31.327-04:00",
"updated_at": "2023-10-24T05:53:43.527-04:00"
},
{
"id": 1251260,
"name": "mammi_wolfgang",
"post_count": 4,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T05:19:10.341-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T05:19:11.134-04:00",
"updated_at": "2023-10-24T05:19:40.522-04:00"
},
{
"id": 1251259,
"name": "flo_wolfgang",
"post_count": 4,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T05:19:10.341-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T05:19:11.129-04:00",
"updated_at": "2023-10-24T05:19:24.330-04:00"
},
{
"id": 1251258,
"name": "nicole_wolfgang",
"post_count": 4,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T05:19:10.341-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T05:19:11.109-04:00",
"updated_at": "2023-10-24T05:19:50.968-04:00"
},
{
"id": 1251255,
"name": "nim_(razim)",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T04:49:30.099-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T04:49:30.120-04:00",
"updated_at": "2023-10-24T04:50:10.978-04:00"
},
{
"id": 1251254,
"name": "freddie_(freddie_as_f.r.o.7)",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T04:42:53.579-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T04:42:53.791-04:00",
"updated_at": "2023-10-24T04:42:53.791-04:00"
},
{
"id": 1251253,
"name": "low_pawpads",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T04:42:22.631-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T04:42:22.658-04:00",
"updated_at": "2023-10-24T04:42:22.658-04:00"
},
{
"id": 1251252,
"name": "white_multicolored_fur",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T04:41:38.624-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T04:41:38.636-04:00",
"updated_at": "2023-10-24T04:41:38.636-04:00"
},
{
"id": 1251251,
"name": "warrior_cats:_ultimate_edition",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T04:26:51.145-04:00",
"category": 3,
"is_locked": false,
"created_at": "2023-10-24T04:26:52.665-04:00",
"updated_at": "2023-10-24T04:26:52.665-04:00"
},
{
"id": 1251250,
"name": "little_snow_bee",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T04:20:32.428-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T04:20:34.328-04:00",
"updated_at": "2023-10-24T04:20:34.328-04:00"
},
{
"id": 1251249,
"name": "tacticoolmofo",
"post_count": 4,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T04:14:00.773-04:00",
"category": 1,
"is_locked": false,
"created_at": "2023-10-24T04:14:02.427-04:00",
"updated_at": "2023-10-24T04:14:02.427-04:00"
},
{
"id": 1251248,
"name": "zotz_(artist)",
"post_count": 77,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T03:59:43.172-04:00",
"category": 1,
"is_locked": false,
"created_at": "2023-10-24T03:59:43.192-04:00",
"updated_at": "2023-10-24T03:59:52.829-04:00"
},
{
"id": 1251246,
"name": "cum_in_arthropod_abdomen_cloaca",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T03:35:58.957-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T03:35:58.965-04:00",
"updated_at": "2023-10-24T03:35:58.965-04:00"
},
{
"id": 1251245,
"name": "dabubby",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T03:28:51.607-04:00",
"category": 1,
"is_locked": false,
"created_at": "2023-10-24T03:28:53.065-04:00",
"updated_at": "2023-10-24T03:28:59.897-04:00"
},
{
"id": 1251244,
"name": "big_thick_horse_bug_(reptilligator)",
"post_count": 6,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T03:19:04.737-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T03:19:04.762-04:00",
"updated_at": "2023-10-24T03:19:37.148-04:00"
},
{
"id": 1251239,
"name": "sentient_ovum",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T02:24:58.635-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T02:24:58.697-04:00",
"updated_at": "2023-10-24T02:24:58.697-04:00"
},
{
"id": 1251237,
"name": "burningpalace",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T02:10:48.280-04:00",
"category": 1,
"is_locked": false,
"created_at": "2023-10-24T02:10:49.544-04:00",
"updated_at": "2023-10-24T04:11:38.363-04:00"
},
{
"id": 1251236,
"name": "gixer",
"post_count": 2,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T02:10:00.860-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T02:10:02.583-04:00",
"updated_at": "2023-10-24T02:10:22.835-04:00"
},
{
"id": 1251235,
"name": "skirt_in_mouth",
"post_count": 2,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T02:07:20.977-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T02:07:21.041-04:00",
"updated_at": "2023-10-24T02:07:21.041-04:00"
},
{
"id": 1251234,
"name": "lara_(fightinlove)",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T02:05:15.564-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T02:05:20.184-04:00",
"updated_at": "2023-10-24T05:39:23.811-04:00"
},
{
"id": 1251233,
"name": "jane_(wonder_b-cruise)",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T02:03:30.108-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T02:03:30.144-04:00",
"updated_at": "2023-10-24T02:03:30.144-04:00"
},
{
"id": 1251232,
"name": "tracy_(wonder_b-cruise)",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T02:03:30.108-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T02:03:30.140-04:00",
"updated_at": "2023-10-24T02:03:30.140-04:00"
},
{
"id": 1251231,
"name": "garland_(wonder_b-cruise)",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T02:03:30.108-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T02:03:30.133-04:00",
"updated_at": "2023-10-24T02:03:30.133-04:00"
},
{
"id": 1251230,
"name": "wonder_b-cruise",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T01:59:16.044-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T01:59:16.066-04:00",
"updated_at": "2023-10-24T01:59:16.066-04:00"
},
{
"id": 1251227,
"name": "sam_(shai_dreamcast)",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T01:50:05.159-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T01:50:10.224-04:00",
"updated_at": "2023-10-24T06:50:56.134-04:00"
},
{
"id": 1251226,
"name": "flip_(greenstranger)",
"post_count": 2,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T01:43:51.267-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T01:43:53.314-04:00",
"updated_at": "2023-10-24T01:43:53.314-04:00"
},
{
"id": 1251225,
"name": "jade_(shai_dreamcast)",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T01:43:48.317-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T01:43:49.808-04:00",
"updated_at": "2023-10-24T01:43:57.309-04:00"
},
{
"id": 1251224,
"name": "eris_morgan",
"post_count": 6,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T01:41:22.193-04:00",
"category": 1,
"is_locked": false,
"created_at": "2023-10-24T01:41:22.896-04:00",
"updated_at": "2023-10-24T06:31:17.336-04:00"
},
{
"id": 1251223,
"name": "heaven's_door",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T01:40:19.716-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T01:40:19.734-04:00",
"updated_at": "2023-10-24T01:40:31.461-04:00"
},
{
"id": 1251222,
"name": "lenore_(peachbumz)",
"post_count": 2,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T01:39:42.014-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T01:39:42.941-04:00",
"updated_at": "2023-10-24T01:39:42.941-04:00"
},
{
"id": 1251221,
"name": "dawn_(bratcatt)",
"post_count": 2,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T01:27:57.857-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T01:27:58.852-04:00",
"updated_at": "2023-10-24T01:27:58.852-04:00"
},
{
"id": 1251220,
"name": "solaris26",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T01:27:51.773-04:00",
"category": 1,
"is_locked": false,
"created_at": "2023-10-24T01:27:52.818-04:00",
"updated_at": "2023-10-24T01:28:06.079-04:00"
},
{
"id": 1251219,
"name": "xcookieeex",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T01:25:12.335-04:00",
"category": 1,
"is_locked": false,
"created_at": "2023-10-24T01:25:16.580-04:00",
"updated_at": "2023-10-24T06:53:02.328-04:00"
},
{
"id": 1251218,
"name": "cookie_(xcookieeex)",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T01:25:12.335-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T01:25:16.561-04:00",
"updated_at": "2023-10-24T06:53:15.800-04:00"
},
{
"id": 1251217,
"name": "tundra_(cosmicinteleon)",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T01:25:03.856-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T01:25:07.436-04:00",
"updated_at": "2023-10-24T01:25:25.101-04:00"
},
{
"id": 1251215,
"name": "stuck_in_box",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T00:54:45.209-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T00:54:45.240-04:00",
"updated_at": "2023-10-24T00:54:45.240-04:00"
},
{
"id": 1251214,
"name": "posquora1",
"post_count": 2,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T00:52:53.091-04:00",
"category": 1,
"is_locked": false,
"created_at": "2023-10-24T00:52:53.115-04:00",
"updated_at": "2023-10-24T00:52:53.115-04:00"
},
{
"id": 1251212,
"name": "minty_mintleaf_(fishpaste2100)",
"post_count": 4,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T00:46:31.384-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T00:46:31.406-04:00",
"updated_at": "2023-10-24T00:46:31.406-04:00"
},
{
"id": 1251211,
"name": "parlormaid",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T00:45:30.371-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T00:45:31.026-04:00",
"updated_at": "2023-10-24T00:45:31.026-04:00"
},
{
"id": 1251210,
"name": "solodimeleo",
"post_count": 2,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T00:36:02.136-04:00",
"category": 1,
"is_locked": false,
"created_at": "2023-10-24T00:36:05.350-04:00",
"updated_at": "2023-10-24T00:37:45.770-04:00"
},
{
"id": 1251208,
"name": "klustr_jr",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T00:33:51.994-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T00:33:52.014-04:00",
"updated_at": "2023-10-24T00:34:56.371-04:00"
},
{
"id": 1251207,
"name": "bigal_(1-upclock)",
"post_count": 3,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T00:25:55.576-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T00:25:57.052-04:00",
"updated_at": "2023-10-24T00:25:57.052-04:00"
},
{
"id": 1251204,
"name": "lulu_(1-upclock)",
"post_count": 3,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T00:20:12.918-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-24T00:20:14.797-04:00",
"updated_at": "2023-10-24T00:20:14.797-04:00"
},
{
"id": 1251201,
"name": "fake_metal_big",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T00:11:41.639-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T00:11:41.649-04:00",
"updated_at": "2023-10-24T00:11:41.649-04:00"
},
{
"id": 1251200,
"name": "irene_(thixxen)",
"post_count": 2,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-24T00:06:10.688-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-24T00:06:15.685-04:00",
"updated_at": "2023-10-24T00:10:59.339-04:00"
},
{
"id": 1251197,
"name": "pollianna_(monodreams)",
"post_count": 2,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-23T23:58:51.324-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-23T23:58:51.363-04:00",
"updated_at": "2023-10-23T23:59:16.944-04:00"
},
{
"id": 1251196,
"name": "suspended_by_torso",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-23T23:47:57.838-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-23T23:47:57.868-04:00",
"updated_at": "2023-10-23T23:47:57.868-04:00"
},
{
"id": 1251195,
"name": "suspended_by_flipper",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-23T23:47:57.838-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-23T23:47:57.858-04:00",
"updated_at": "2023-10-23T23:47:57.858-04:00"
},
{
"id": 1251192,
"name": "pseudo_scat",
"post_count": 8,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-23T23:33:24.475-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-23T23:33:24.505-04:00",
"updated_at": "2023-10-23T23:33:24.505-04:00"
},
{
"id": 1251191,
"name": "smooth_pelvis",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-23T23:33:07.539-04:00",
"category": 0,
"is_locked": false,
"created_at": "2023-10-23T23:33:08.336-04:00",
"updated_at": "2023-10-23T23:33:08.336-04:00"
},
{
"id": 1251190,
"name": "auzzy",
"post_count": 3,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-23T23:28:48.545-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-23T23:28:50.531-04:00",
"updated_at": "2023-10-23T23:29:00.248-04:00"
},
{
"id": 1251189,
"name": "datowda",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-23T23:18:49.452-04:00",
"category": 1,
"is_locked": false,
"created_at": "2023-10-23T23:18:50.368-04:00",
"updated_at": "2023-10-23T23:18:50.368-04:00"
},
{
"id": 1251188,
"name": "linia_dedoldia",
"post_count": 2,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-23T23:00:31.757-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-23T23:00:37.697-04:00",
"updated_at": "2023-10-23T23:01:00.303-04:00"
},
{
"id": 1251187,
"name": "pursena_adoldia",
"post_count": 2,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-23T23:00:31.757-04:00",
"category": 4,
"is_locked": false,
"created_at": "2023-10-23T23:00:37.690-04:00",
"updated_at": "2023-10-23T23:00:53.457-04:00"
},
{
"id": 1251186,
"name": "galacteasers",
"post_count": 1,
"related_tags": "[]",
"related_tags_updated_at": "2023-10-23T22:57:13.026-04:00",
"category": 1,
"is_locked": false,
"created_at": "2023-10-23T22:57:15.489-04:00",
"updated_at": "2023-10-23T22:57:32.732-04:00"
}
]

26
tests/user.json Normal file
View File

@ -0,0 +1,26 @@
{
"wiki_page_version_count": 0,
"artist_version_count": 0,
"pool_version_count": 0,
"forum_post_count": 0,
"comment_count": 1,
"flag_count": 0,
"favorite_count": 1454,
"positive_feedback_count": 0,
"neutral_feedback_count": 0,
"negative_feedback_count": 0,
"upload_limit": 10,
"id": 136501,
"created_at": "2014-04-23T07:08:04.080-04:00",
"name": "Selloo",
"level": 20,
"base_upload_limit": 10,
"post_upload_count": 0,
"post_update_count": 5,
"note_update_count": 0,
"is_banned": false,
"can_approve_posts": false,
"can_upload_free": false,
"level_string": "Member",
"avatar_id": 922595
}

1127
tests/users.json Normal file

File diff suppressed because it is too large Load Diff