From 384f1fe066b5774476444a2660cc721914fd3d6e Mon Sep 17 00:00:00 2001 From: Charles Iliya Krempeaux Date: Wed, 27 Sep 2023 15:34:42 +0900 Subject: [PATCH] initial commits --- ent/report.go | 23 +- ent/report_marshaljson_test.go | 832 +++++++++++++++++++++++++++++++++ ent/role.go | 16 +- 3 files changed, 851 insertions(+), 20 deletions(-) create mode 100644 ent/report_marshaljson_test.go diff --git a/ent/report.go b/ent/report.go index 8f3c695..7f093d1 100644 --- a/ent/report.go +++ b/ent/report.go @@ -1,8 +1,7 @@ package ent import ( - "encoding/json" - + "sourcecode.social/reiver/go-jsonstr" "sourcecode.social/reiver/go-nul" "sourcecode.social/reiver/go-opt" ) @@ -12,14 +11,14 @@ import ( // See: // https://docs.joinmastodon.org/entities/Report/ type Report struct { - ID opt.Optional[string] `json:"id"` - ActionTaken opt.Optional[bool] `json:"action_taken"` - ActionTakenAt nul.Nullable[string] `json:"action_taken_at"` - Category opt.Optional[string] `json:"category"` - Comment opt.Optional[string] `json:"comment"` - Forwarded opt.Optional[bool] `json:"forwarded"` - CreatedAt opt.Optional[string] `json:"created_at"` - StatusIDs json.RawMessage `json:"status_ids"` - RuleIDs json.RawMessage `json:"rule_ids"` - TargetAccount Account `json:"target_account"` + ID opt.Optional[string] `json:"id"` + ActionTaken opt.Optional[bool] `json:"action_taken"` + ActionTakenAt nul.Nullable[string] `json:"action_taken_at"` + Category opt.Optional[string] `json:"category"` + Comment opt.Optional[string] `json:"comment"` + Forwarded opt.Optional[bool] `json:"forwarded"` + CreatedAt opt.Optional[string] `json:"created_at"` + StatusIDs nul.Nullable[jsonstr.Strings] `json:"status_ids"` + RuleIDs nul.Nullable[jsonstr.Strings] `json:"rule_ids"` + TargetAccount Account `json:"target_account"` } diff --git a/ent/report_marshaljson_test.go b/ent/report_marshaljson_test.go new file mode 100644 index 0000000..f96db4d --- /dev/null +++ b/ent/report_marshaljson_test.go @@ -0,0 +1,832 @@ +package ent_test + +import ( + "testing" + + "encoding/json" + + "sourcecode.social/reiver/go-jsonint" + "sourcecode.social/reiver/go-jsonpp" + "sourcecode.social/reiver/go-jsonstr" + "sourcecode.social/reiver/go-nul" + "sourcecode.social/reiver/go-opt" + + "sourcecode.social/reiver/go-mstdn/ent" +) + +func TestReport_MarshalJSON(t *testing.T) { + + tests := []struct{ + Report ent.Report + Expected string + }{ + { + Report: ent.Report{ + ID: opt.Something("0918273645"), + ActionTaken: opt.Something(false), + ActionTakenAt: nul.Null[string](), + Category: opt.Something("spam"), + Comment: opt.Something("this f-er spamed me"), + Forwarded: opt.Something(false), + CreatedAt: opt.Something("2023-09-27T00:31:59Z"), + StatusIDs: nul.Null[jsonstr.Strings](), + RuleIDs: nul.Null[jsonstr.Strings](), + TargetAccount: ent.Account{ + ID: opt.Something("12345"), + UserName: opt.Something("joeblow"), + Acct: opt.Something("joeblow@example.com"), + DisplayName: opt.Something("Joe Blow :-)"), + Locked: opt.Something(false), + Bot: opt.Something(false), + Discoverable: opt.Something(true), + CreatedAt: opt.Something("2017-02-08T02:00:53.274Z"), + Note: opt.Something("

I came. I saw. I conquered!

"), + URL: opt.Something("https://example.com/@joeblow"), + URI: opt.Something("https://example.com/users/joeblow"), + Avatar: opt.Something("https://files.example.com/avatar/joeblow.png"), + AvatarStatic: opt.Something("https://files.example.com/avatar-static/joeblow.png"), + Header: opt.Something("https://files.example.com/header/joeblow.png"), + HeaderStatic: opt.Something("https://files.example.com/header-static/joeblow/png"), + FollowersCount: opt.Something(jsonint.Int64(12345)), + FollowingCount: opt.Something(jsonint.Int64(210)), + StatusesCount: opt.Something(jsonint.Int64(9876543210)), + LastStatusAt: opt.Something("2023-09-27T00:31:59Z"), + NoIndex: opt.Something(false), + //Emojis []CustomEmoji `json:"emojis"` + //Roles []Role `json:"roles"` + //Fields []Field `json:"fields"` + }, + }, + Expected : + `{`+ + `"id":"0918273645"`+ + `,`+ + `"action_taken":false`+ + `,`+ + `"action_taken_at":null`+ + `,`+ + `"category":"spam"`+ + `,`+ + `"comment":"this f-er spamed me"`+ + `,`+ + `"forwarded":false`+ + `,`+ + `"created_at":"2023-09-27T00:31:59Z"`+ + `,`+ + `"status_ids":null`+ + `,`+ + `"rule_ids":null`+ + `,`+ + `"target_account":{`+ + `"id":"12345"`+ + `,`+ + `"username":"joeblow"`+ + `,`+ + `"acct":"joeblow@example.com"`+ + `,`+ + `"display_name":"Joe Blow :-)"`+ + `,`+ + `"locked":false`+ + `,`+ + `"bot":false`+ + `,`+ + `"discoverable":true`+ + `,`+ + `"created_at":"2017-02-08T02:00:53.274Z"`+ + `,`+ + `"note":"\u003cp\u003eI came. I saw. I conquered!\u003c/p\u003e"`+ + `,`+ + `"url":"https://example.com/@joeblow"`+ + `,`+ + `"uri":"https://example.com/users/joeblow"`+ + `,`+ + `"avatar":"https://files.example.com/avatar/joeblow.png"`+ + `,`+ + `"avatar_static":"https://files.example.com/avatar-static/joeblow.png"`+ + `,`+ + `"header":"https://files.example.com/header/joeblow.png"`+ + `,`+ + `"header_static":"https://files.example.com/header-static/joeblow/png"`+ + `,`+ + `"followers_count":12345`+ + `,`+ + `"following_count":210`+ + `,`+ + `"statuses_count":9876543210`+ + `,`+ + `"last_status_at":"2023-09-27T00:31:59Z"`+ + `,`+ + `"noindex":false`+ + `,`+ + `"emojis":null`+ + `,`+ + `"roles":null`+ + `,`+ + `"fields":null`+ + `}`+ + `}`, + }, + + + + { + Report: ent.Report{ + ID: opt.Something("0918273645"), + ActionTaken: opt.Something(true), + ActionTakenAt: nul.Something("2024-02-27T00:31:59Z"), + Category: opt.Something("spam"), + Comment: opt.Something("this f-er spamed me"), + Forwarded: opt.Something(false), + CreatedAt: opt.Something("2023-09-27T00:31:59Z"), + StatusIDs: nul.Null[jsonstr.Strings](), + RuleIDs: nul.Null[jsonstr.Strings](), + TargetAccount: ent.Account{ + ID: opt.Something("12345"), + UserName: opt.Something("joeblow"), + Acct: opt.Something("joeblow@example.com"), + DisplayName: opt.Something("Joe Blow :-)"), + Locked: opt.Something(false), + Bot: opt.Something(false), + Discoverable: opt.Something(true), + CreatedAt: opt.Something("2017-02-08T02:00:53.274Z"), + Note: opt.Something("

I came. I saw. I conquered!

"), + URL: opt.Something("https://example.com/@joeblow"), + URI: opt.Something("https://example.com/users/joeblow"), + Avatar: opt.Something("https://files.example.com/avatar/joeblow.png"), + AvatarStatic: opt.Something("https://files.example.com/avatar-static/joeblow.png"), + Header: opt.Something("https://files.example.com/header/joeblow.png"), + HeaderStatic: opt.Something("https://files.example.com/header-static/joeblow/png"), + FollowersCount: opt.Something(jsonint.Int64(12345)), + FollowingCount: opt.Something(jsonint.Int64(210)), + StatusesCount: opt.Something(jsonint.Int64(9876543210)), + LastStatusAt: opt.Something("2023-09-27T00:31:59Z"), + NoIndex: opt.Something(false), + //Emojis []CustomEmoji `json:"emojis"` + //Roles []Role `json:"roles"` + //Fields []Field `json:"fields"` + }, + }, + Expected : + `{`+ + `"id":"0918273645"`+ + `,`+ + `"action_taken":true`+ + `,`+ + `"action_taken_at":"2024-02-27T00:31:59Z"`+ + `,`+ + `"category":"spam"`+ + `,`+ + `"comment":"this f-er spamed me"`+ + `,`+ + `"forwarded":false`+ + `,`+ + `"created_at":"2023-09-27T00:31:59Z"`+ + `,`+ + `"status_ids":null`+ + `,`+ + `"rule_ids":null`+ + `,`+ + `"target_account":{`+ + `"id":"12345"`+ + `,`+ + `"username":"joeblow"`+ + `,`+ + `"acct":"joeblow@example.com"`+ + `,`+ + `"display_name":"Joe Blow :-)"`+ + `,`+ + `"locked":false`+ + `,`+ + `"bot":false`+ + `,`+ + `"discoverable":true`+ + `,`+ + `"created_at":"2017-02-08T02:00:53.274Z"`+ + `,`+ + `"note":"\u003cp\u003eI came. I saw. I conquered!\u003c/p\u003e"`+ + `,`+ + `"url":"https://example.com/@joeblow"`+ + `,`+ + `"uri":"https://example.com/users/joeblow"`+ + `,`+ + `"avatar":"https://files.example.com/avatar/joeblow.png"`+ + `,`+ + `"avatar_static":"https://files.example.com/avatar-static/joeblow.png"`+ + `,`+ + `"header":"https://files.example.com/header/joeblow.png"`+ + `,`+ + `"header_static":"https://files.example.com/header-static/joeblow/png"`+ + `,`+ + `"followers_count":12345`+ + `,`+ + `"following_count":210`+ + `,`+ + `"statuses_count":9876543210`+ + `,`+ + `"last_status_at":"2023-09-27T00:31:59Z"`+ + `,`+ + `"noindex":false`+ + `,`+ + `"emojis":null`+ + `,`+ + `"roles":null`+ + `,`+ + `"fields":null`+ + `}`+ + `}`, + }, + + + + { + Report: ent.Report{ + ID: opt.Something("0918273645"), + ActionTaken: opt.Something(true), + ActionTakenAt: nul.Something("2024-02-27T00:31:59Z"), + Category: opt.Something("spam"), + Comment: opt.Something("this f-er spamed me"), + Forwarded: opt.Something(false), + CreatedAt: opt.Something("2023-09-27T00:31:59Z"), + StatusIDs: nul.Something(jsonstr.CompileStrings("7823598731", "7916234158", "5218091242")), + RuleIDs: nul.Null[jsonstr.Strings](), + TargetAccount: ent.Account{ + ID: opt.Something("12345"), + UserName: opt.Something("joeblow"), + Acct: opt.Something("joeblow@example.com"), + DisplayName: opt.Something("Joe Blow :-)"), + Locked: opt.Something(false), + Bot: opt.Something(false), + Discoverable: opt.Something(true), + CreatedAt: opt.Something("2017-02-08T02:00:53.274Z"), + Note: opt.Something("

I came. I saw. I conquered!

"), + URL: opt.Something("https://example.com/@joeblow"), + URI: opt.Something("https://example.com/users/joeblow"), + Avatar: opt.Something("https://files.example.com/avatar/joeblow.png"), + AvatarStatic: opt.Something("https://files.example.com/avatar-static/joeblow.png"), + Header: opt.Something("https://files.example.com/header/joeblow.png"), + HeaderStatic: opt.Something("https://files.example.com/header-static/joeblow/png"), + FollowersCount: opt.Something(jsonint.Int64(12345)), + FollowingCount: opt.Something(jsonint.Int64(210)), + StatusesCount: opt.Something(jsonint.Int64(9876543210)), + LastStatusAt: opt.Something("2023-09-27T00:31:59Z"), + NoIndex: opt.Something(false), + //Emojis []CustomEmoji `json:"emojis"` + //Roles []Role `json:"roles"` + //Fields []Field `json:"fields"` + }, + }, + Expected : + `{`+ + `"id":"0918273645"`+ + `,`+ + `"action_taken":true`+ + `,`+ + `"action_taken_at":"2024-02-27T00:31:59Z"`+ + `,`+ + `"category":"spam"`+ + `,`+ + `"comment":"this f-er spamed me"`+ + `,`+ + `"forwarded":false`+ + `,`+ + `"created_at":"2023-09-27T00:31:59Z"`+ + `,`+ + `"status_ids":["7823598731","7916234158","5218091242"]`+ + `,`+ + `"rule_ids":null`+ + `,`+ + `"target_account":{`+ + `"id":"12345"`+ + `,`+ + `"username":"joeblow"`+ + `,`+ + `"acct":"joeblow@example.com"`+ + `,`+ + `"display_name":"Joe Blow :-)"`+ + `,`+ + `"locked":false`+ + `,`+ + `"bot":false`+ + `,`+ + `"discoverable":true`+ + `,`+ + `"created_at":"2017-02-08T02:00:53.274Z"`+ + `,`+ + `"note":"\u003cp\u003eI came. I saw. I conquered!\u003c/p\u003e"`+ + `,`+ + `"url":"https://example.com/@joeblow"`+ + `,`+ + `"uri":"https://example.com/users/joeblow"`+ + `,`+ + `"avatar":"https://files.example.com/avatar/joeblow.png"`+ + `,`+ + `"avatar_static":"https://files.example.com/avatar-static/joeblow.png"`+ + `,`+ + `"header":"https://files.example.com/header/joeblow.png"`+ + `,`+ + `"header_static":"https://files.example.com/header-static/joeblow/png"`+ + `,`+ + `"followers_count":12345`+ + `,`+ + `"following_count":210`+ + `,`+ + `"statuses_count":9876543210`+ + `,`+ + `"last_status_at":"2023-09-27T00:31:59Z"`+ + `,`+ + `"noindex":false`+ + `,`+ + `"emojis":null`+ + `,`+ + `"roles":null`+ + `,`+ + `"fields":null`+ + `}`+ + `}`, + }, + + + + { + Report: ent.Report{ + ID: opt.Something("0918273645"), + ActionTaken: opt.Something(true), + ActionTakenAt: nul.Something("2024-02-27T00:31:59Z"), + Category: opt.Something("spam"), + Comment: opt.Something("this f-er spamed me"), + Forwarded: opt.Something(false), + CreatedAt: opt.Something("2023-09-27T00:31:59Z"), + StatusIDs: nul.Something(jsonstr.CompileStrings("7823598731", "7916234158", "5218091242")), + RuleIDs: nul.Something(jsonstr.CompileStrings("23","1","13","42")), + TargetAccount: ent.Account{ + ID: opt.Something("12345"), + UserName: opt.Something("joeblow"), + Acct: opt.Something("joeblow@example.com"), + DisplayName: opt.Something("Joe Blow :-)"), + Locked: opt.Something(false), + Bot: opt.Something(false), + Discoverable: opt.Something(true), + CreatedAt: opt.Something("2017-02-08T02:00:53.274Z"), + Note: opt.Something("

I came. I saw. I conquered!

"), + URL: opt.Something("https://example.com/@joeblow"), + URI: opt.Something("https://example.com/users/joeblow"), + Avatar: opt.Something("https://files.example.com/avatar/joeblow.png"), + AvatarStatic: opt.Something("https://files.example.com/avatar-static/joeblow.png"), + Header: opt.Something("https://files.example.com/header/joeblow.png"), + HeaderStatic: opt.Something("https://files.example.com/header-static/joeblow/png"), + FollowersCount: opt.Something(jsonint.Int64(12345)), + FollowingCount: opt.Something(jsonint.Int64(210)), + StatusesCount: opt.Something(jsonint.Int64(9876543210)), + LastStatusAt: opt.Something("2023-09-27T00:31:59Z"), + NoIndex: opt.Something(false), + //Emojis []CustomEmoji `json:"emojis"` + //Roles []Role `json:"roles"` + //Fields []Field `json:"fields"` + }, + }, + Expected : + `{`+ + `"id":"0918273645"`+ + `,`+ + `"action_taken":true`+ + `,`+ + `"action_taken_at":"2024-02-27T00:31:59Z"`+ + `,`+ + `"category":"spam"`+ + `,`+ + `"comment":"this f-er spamed me"`+ + `,`+ + `"forwarded":false`+ + `,`+ + `"created_at":"2023-09-27T00:31:59Z"`+ + `,`+ + `"status_ids":["7823598731","7916234158","5218091242"]`+ + `,`+ + `"rule_ids":["23","1","13","42"]`+ + `,`+ + `"target_account":{`+ + `"id":"12345"`+ + `,`+ + `"username":"joeblow"`+ + `,`+ + `"acct":"joeblow@example.com"`+ + `,`+ + `"display_name":"Joe Blow :-)"`+ + `,`+ + `"locked":false`+ + `,`+ + `"bot":false`+ + `,`+ + `"discoverable":true`+ + `,`+ + `"created_at":"2017-02-08T02:00:53.274Z"`+ + `,`+ + `"note":"\u003cp\u003eI came. I saw. I conquered!\u003c/p\u003e"`+ + `,`+ + `"url":"https://example.com/@joeblow"`+ + `,`+ + `"uri":"https://example.com/users/joeblow"`+ + `,`+ + `"avatar":"https://files.example.com/avatar/joeblow.png"`+ + `,`+ + `"avatar_static":"https://files.example.com/avatar-static/joeblow.png"`+ + `,`+ + `"header":"https://files.example.com/header/joeblow.png"`+ + `,`+ + `"header_static":"https://files.example.com/header-static/joeblow/png"`+ + `,`+ + `"followers_count":12345`+ + `,`+ + `"following_count":210`+ + `,`+ + `"statuses_count":9876543210`+ + `,`+ + `"last_status_at":"2023-09-27T00:31:59Z"`+ + `,`+ + `"noindex":false`+ + `,`+ + `"emojis":null`+ + `,`+ + `"roles":null`+ + `,`+ + `"fields":null`+ + `}`+ + `}`, + }, + + + + { + Report: ent.Report{ + ID: opt.Something("0918273645"), + ActionTaken: opt.Something(true), + ActionTakenAt: nul.Something("2024-02-27T00:31:59Z"), + Category: opt.Something("spam"), + Comment: opt.Something("this f-er spamed me"), + Forwarded: opt.Something(false), + CreatedAt: opt.Something("2023-09-27T00:31:59Z"), + StatusIDs: nul.Something(jsonstr.CompileStrings("7823598731", "7916234158", "5218091242")), + RuleIDs: nul.Something(jsonstr.CompileStrings("23","1","13","42")), + TargetAccount: ent.Account{ + ID: opt.Something("12345"), + UserName: opt.Something("joeblow"), + Acct: opt.Something("joeblow@example.com"), + DisplayName: opt.Something("Joe Blow :-) :batman:"), + Locked: opt.Something(false), + Bot: opt.Something(false), + Discoverable: opt.Something(true), + CreatedAt: opt.Something("2017-02-08T02:00:53.274Z"), + Note: opt.Something("

I came. I saw. I conquered!

"), + URL: opt.Something("https://example.com/@joeblow"), + URI: opt.Something("https://example.com/users/joeblow"), + Avatar: opt.Something("https://files.example.com/avatar/joeblow.png"), + AvatarStatic: opt.Something("https://files.example.com/avatar-static/joeblow.png"), + Header: opt.Something("https://files.example.com/header/joeblow.png"), + HeaderStatic: opt.Something("https://files.example.com/header-static/joeblow/png"), + FollowersCount: opt.Something(jsonint.Int64(12345)), + FollowingCount: opt.Something(jsonint.Int64(210)), + StatusesCount: opt.Something(jsonint.Int64(9876543210)), + LastStatusAt: opt.Something("2023-09-27T00:31:59Z"), + NoIndex: opt.Something(true), + Emojis: []ent.CustomEmoji{ + ent.CustomEmoji{ + ShortCode: opt.Something("batman"), + URL: opt.Something("https://files.example.com/emoji/batman.png"), + StaticURL: opt.Something("https://files.example.com/emoji-static/batman.png"), + VisibleInPicker: opt.Something(true), + }, + ent.CustomEmoji{ + ShortCode: opt.Something("spiderman"), + URL: opt.Something("https://files.example.com/emoji/spiderman.png"), + StaticURL: opt.Something("https://files.example.com/emoji-static/spiderman.png"), + VisibleInPicker: opt.Something(true), + Category: opt.Something("spiders"), + }, + }, + //Roles []Role `json:"roles"` + //Fields []Field `json:"fields"` + }, + }, + Expected : + `{`+ + `"id":"0918273645"`+ + `,`+ + `"action_taken":true`+ + `,`+ + `"action_taken_at":"2024-02-27T00:31:59Z"`+ + `,`+ + `"category":"spam"`+ + `,`+ + `"comment":"this f-er spamed me"`+ + `,`+ + `"forwarded":false`+ + `,`+ + `"created_at":"2023-09-27T00:31:59Z"`+ + `,`+ + `"status_ids":["7823598731","7916234158","5218091242"]`+ + `,`+ + `"rule_ids":["23","1","13","42"]`+ + `,`+ + `"target_account":{`+ + `"id":"12345"`+ + `,`+ + `"username":"joeblow"`+ + `,`+ + `"acct":"joeblow@example.com"`+ + `,`+ + `"display_name":"Joe Blow :-) :batman:"`+ + `,`+ + `"locked":false`+ + `,`+ + `"bot":false`+ + `,`+ + `"discoverable":true`+ + `,`+ + `"created_at":"2017-02-08T02:00:53.274Z"`+ + `,`+ + `"note":"\u003cp\u003eI came. I saw. I conquered!\u003c/p\u003e"`+ + `,`+ + `"url":"https://example.com/@joeblow"`+ + `,`+ + `"uri":"https://example.com/users/joeblow"`+ + `,`+ + `"avatar":"https://files.example.com/avatar/joeblow.png"`+ + `,`+ + `"avatar_static":"https://files.example.com/avatar-static/joeblow.png"`+ + `,`+ + `"header":"https://files.example.com/header/joeblow.png"`+ + `,`+ + `"header_static":"https://files.example.com/header-static/joeblow/png"`+ + `,`+ + `"followers_count":12345`+ + `,`+ + `"following_count":210`+ + `,`+ + `"statuses_count":9876543210`+ + `,`+ + `"last_status_at":"2023-09-27T00:31:59Z"`+ + `,`+ + `"noindex":true`+ + `,`+ + `"emojis":[`+ + `{`+ + `"shortcode":"batman"`+ + `,`+ + `"static_url":"https://files.example.com/emoji-static/batman.png"`+ + `,`+ + `"url":"https://files.example.com/emoji/batman.png"`+ + `,`+ + `"visible_in_picker":true`+ + `}`+ + `,`+ + `{`+ + `"category":"spiders"`+ + `,`+ + `"shortcode":"spiderman"`+ + `,`+ + `"static_url":"https://files.example.com/emoji-static/spiderman.png"`+ + `,`+ + `"url":"https://files.example.com/emoji/spiderman.png"`+ + `,`+ + `"visible_in_picker":true`+ + `}`+ + `]`+ + `,`+ + `"roles":null`+ + `,`+ + `"fields":null`+ + `}`+ + `}`, + }, + + + + { + Report: ent.Report{ + ID: opt.Something("0918273645"), + ActionTaken: opt.Something(true), + ActionTakenAt: nul.Something("2024-02-27T00:31:59Z"), + Category: opt.Something("spam"), + Comment: opt.Something("this f-er spamed me"), + Forwarded: opt.Something(false), + CreatedAt: opt.Something("2023-09-27T00:31:59Z"), + StatusIDs: nul.Something(jsonstr.CompileStrings("7823598731", "7916234158", "5218091242")), + RuleIDs: nul.Something(jsonstr.CompileStrings("23","1","13","42")), + TargetAccount: ent.Account{ + ID: opt.Something("12345"), + UserName: opt.Something("joeblow"), + Acct: opt.Something("joeblow@example.com"), + DisplayName: opt.Something("Joe Blow :-) :batman:"), + Locked: opt.Something(false), + Bot: opt.Something(false), + Discoverable: opt.Something(true), + CreatedAt: opt.Something("2017-02-08T02:00:53.274Z"), + Note: opt.Something("

I came. I saw. I conquered!

"), + URL: opt.Something("https://example.com/@joeblow"), + URI: opt.Something("https://example.com/users/joeblow"), + Avatar: opt.Something("https://files.example.com/avatar/joeblow.png"), + AvatarStatic: opt.Something("https://files.example.com/avatar-static/joeblow.png"), + Header: opt.Something("https://files.example.com/header/joeblow.png"), + HeaderStatic: opt.Something("https://files.example.com/header-static/joeblow/png"), + FollowersCount: opt.Something(jsonint.Int64(12345)), + FollowingCount: opt.Something(jsonint.Int64(210)), + StatusesCount: opt.Something(jsonint.Int64(9876543210)), + LastStatusAt: opt.Something("2023-09-27T00:31:59Z"), + NoIndex: opt.Something(true), + Emojis: []ent.CustomEmoji{ + ent.CustomEmoji{ + ShortCode: opt.Something("batman"), + URL: opt.Something("https://files.example.com/emoji/batman.png"), + StaticURL: opt.Something("https://files.example.com/emoji-static/batman.png"), + VisibleInPicker: opt.Something(true), + }, + ent.CustomEmoji{ + ShortCode: opt.Something("spiderman"), + URL: opt.Something("https://files.example.com/emoji/spiderman.png"), + StaticURL: opt.Something("https://files.example.com/emoji-static/spiderman.png"), + VisibleInPicker: opt.Something(true), + Category: opt.Something("spiders"), + }, + ent.CustomEmoji{ + ShortCode: opt.Something("busooka"), + URL: opt.Something("https://files.example.com/emoji/dads-name-for-his-sons-toy.png"), + StaticURL: opt.Something("https://files.example.com/emoji-static/dads-name-for-his-sons-toy.png"), + VisibleInPicker: opt.Something(false), + Category: opt.Something("not-transformers"), + }, + }, + Roles: []ent.Role{ + ent.Role{ + ID: opt.Something(jsonint.Int64(17)), + Name : opt.Something("editor"), + Permissions: opt.Something(jsonint.Int64(8)), + Highlighted: opt.Something(false), + }, + ent.Role{ + ID: opt.Something(jsonint.Int64(23)), + Name: opt.Something("super-fan"), + Color: opt.Something("#dd2211"), + Permissions: opt.Something(jsonint.Int64(255)), + Highlighted: opt.Something(true), + }, + }, + //Fields []Field `json:"fields"` + }, + }, + Expected : + `{`+ + `"id":"0918273645"`+ + `,`+ + `"action_taken":true`+ + `,`+ + `"action_taken_at":"2024-02-27T00:31:59Z"`+ + `,`+ + `"category":"spam"`+ + `,`+ + `"comment":"this f-er spamed me"`+ + `,`+ + `"forwarded":false`+ + `,`+ + `"created_at":"2023-09-27T00:31:59Z"`+ + `,`+ + `"status_ids":["7823598731","7916234158","5218091242"]`+ + `,`+ + `"rule_ids":["23","1","13","42"]`+ + `,`+ + `"target_account":{`+ + `"id":"12345"`+ + `,`+ + `"username":"joeblow"`+ + `,`+ + `"acct":"joeblow@example.com"`+ + `,`+ + `"display_name":"Joe Blow :-) :batman:"`+ + `,`+ + `"locked":false`+ + `,`+ + `"bot":false`+ + `,`+ + `"discoverable":true`+ + `,`+ + `"created_at":"2017-02-08T02:00:53.274Z"`+ + `,`+ + `"note":"\u003cp\u003eI came. I saw. I conquered!\u003c/p\u003e"`+ + `,`+ + `"url":"https://example.com/@joeblow"`+ + `,`+ + `"uri":"https://example.com/users/joeblow"`+ + `,`+ + `"avatar":"https://files.example.com/avatar/joeblow.png"`+ + `,`+ + `"avatar_static":"https://files.example.com/avatar-static/joeblow.png"`+ + `,`+ + `"header":"https://files.example.com/header/joeblow.png"`+ + `,`+ + `"header_static":"https://files.example.com/header-static/joeblow/png"`+ + `,`+ + `"followers_count":12345`+ + `,`+ + `"following_count":210`+ + `,`+ + `"statuses_count":9876543210`+ + `,`+ + `"last_status_at":"2023-09-27T00:31:59Z"`+ + `,`+ + `"noindex":true`+ + `,`+ + `"emojis":[`+ + `{`+ + `"shortcode":"batman"`+ + `,`+ + `"static_url":"https://files.example.com/emoji-static/batman.png"`+ + `,`+ + `"url":"https://files.example.com/emoji/batman.png"`+ + `,`+ + `"visible_in_picker":true`+ + `}`+ + `,`+ + `{`+ + `"category":"spiders"`+ + `,`+ + `"shortcode":"spiderman"`+ + `,`+ + `"static_url":"https://files.example.com/emoji-static/spiderman.png"`+ + `,`+ + `"url":"https://files.example.com/emoji/spiderman.png"`+ + `,`+ + `"visible_in_picker":true`+ + `}`+ + `,`+ + `{`+ + `"category":"not-transformers"`+ + `,`+ + `"shortcode":"busooka"`+ + `,`+ + `"static_url":"https://files.example.com/emoji-static/dads-name-for-his-sons-toy.png"`+ + `,`+ + `"url":"https://files.example.com/emoji/dads-name-for-his-sons-toy.png"`+ + `,`+ + `"visible_in_picker":false`+ + `}`+ + `]`+ + `,`+ + `"roles":[`+ + `{`+ + `"id":17`+ + `,`+ + `"name":"editor"`+ + `,`+ + `"color":""`+ + `,`+ + `"permissions":8`+ + `,`+ + `"highlighted":false`+ + `}`+ + `,`+ + `{`+ + `"id":23`+ + `,`+ + `"name":"super-fan"`+ + `,`+ + `"color":"#dd2211"`+ + `,`+ + `"permissions":255`+ + `,`+ + `"highlighted":true`+ + `}`+ + `]`+ + `,`+ + `"fields":null`+ + `}`+ + `}`, + }, + } + + for testNumber, test := range tests { + + actualBytes, err := json.Marshal(test.Report) + if nil != err { + t.Errorf("For test #%d, did not expect an error but actually got one.", testNumber) + t.Logf("ERROR: (%T) %s", err, err) + t.Logf("REPORT: %#v", test.Report) + t.Logf("EXPECTED:\n%s", test.Expected) + t.Logf("EXPECTED:\n%s", jsonpp.SPrettyPrint([]byte(test.Expected))) + continue + } + + { + actual := string(actualBytes) + expected := test.Expected + + if expected != actual { + t.Errorf("For test #%d, the actual value is not what was expected.", testNumber) + t.Logf("EXPECTED:\n%s", expected) + t.Logf("ACTUAL:\n%s", actual) + t.Logf("EXPECTED:\n%s", jsonpp.SPrettyPrint([]byte(expected))) + t.Logf("ACTUAL:\n%s", jsonpp.SPrettyPrint([]byte(actual))) + t.Logf("REPORT: %#v", test.Report) + continue + } + } + } +} diff --git a/ent/role.go b/ent/role.go index 78e758c..f27882a 100644 --- a/ent/role.go +++ b/ent/role.go @@ -15,11 +15,11 @@ var _ json.Unmarshaler = new(Role) // See: // https://docs.joinmastodon.org/entities/Role/ type Role struct { - ID opt.Optional[jsonint.Int] `json:"id"` - Name opt.Optional[string] `json:"name"` - Color opt.Optional[string] `json:"color"` - Permissions opt.Optional[jsonint.Int] `json:"permissions"` - Highlighted opt.Optional[bool] `json:"highlighted"` + ID opt.Optional[jsonint.Int] + Name opt.Optional[string] + Color opt.Optional[string] + Permissions opt.Optional[jsonint.Int] + Highlighted opt.Optional[bool] } type role struct { @@ -27,7 +27,7 @@ type role struct { Name opt.Optional[string] `json:"name"` Color opt.Optional[string] `json:"color"` Permissions opt.Optional[jsonint.Int] `json:"permissions"` - Highlighted opt.Optional[bool] `json:"Highlighted"` + Highlighted opt.Optional[bool] `json:"highlighted"` } func (receiver Role) MarshalJSON() ([]byte, error) { @@ -37,10 +37,10 @@ func (receiver Role) MarshalJSON() ([]byte, error) { src.ID = receiver.ID src.Name = receiver.Name src.Permissions = receiver.Permissions - src.Highlighted = src.Highlighted + src.Highlighted = receiver.Highlighted src.Color = receiver.Color - receiver.Color.WhenNothing(func(){ + src.Color.WhenNothing(func(){ src.Color = opt.Something("") })