This repository has been archived on 2022-11-27. You can view files and clone it, but cannot push or open issues or pull requests.
activitypub/actor_test.go

572 lines
13 KiB
Go

package activitypub
import (
"fmt"
"reflect"
"testing"
"time"
)
func TestActorNew(t *testing.T) {
var testValue = ID("test")
var testType = ApplicationType
o := ActorNew(testValue, testType)
if o.ID != testValue {
t.Errorf("APObject Id '%v' different than expected '%v'", o.ID, testValue)
}
if o.Type != testType {
t.Errorf("APObject Type '%v' different than expected '%v'", o.Type, testType)
}
n := ActorNew(testValue, "")
if n.ID != testValue {
t.Errorf("APObject Id '%v' different than expected '%v'", n.ID, testValue)
}
if n.Type != ActorType {
t.Errorf("APObject Type '%v' different than expected '%v'", n.Type, ActorType)
}
}
func TestPersonNew(t *testing.T) {
var testValue = ID("test")
o := PersonNew(testValue)
if o.ID != testValue {
t.Errorf("APObject Id '%v' different than expected '%v'", o.ID, testValue)
}
if o.Type != PersonType {
t.Errorf("APObject Type '%v' different than expected '%v'", o.Type, PersonType)
}
}
func TestApplicationNew(t *testing.T) {
var testValue = ID("test")
o := ApplicationNew(testValue)
if o.ID != testValue {
t.Errorf("APObject Id '%v' different than expected '%v'", o.ID, testValue)
}
if o.Type != ApplicationType {
t.Errorf("APObject Type '%v' different than expected '%v'", o.Type, ApplicationType)
}
}
func TestGroupNew(t *testing.T) {
var testValue = ID("test")
o := GroupNew(testValue)
if o.ID != testValue {
t.Errorf("APObject Id '%v' different than expected '%v'", o.ID, testValue)
}
if o.Type != GroupType {
t.Errorf("APObject Type '%v' different than expected '%v'", o.Type, GroupType)
}
}
func TestOrganizationNew(t *testing.T) {
var testValue = ID("test")
o := OrganizationNew(testValue)
if o.ID != testValue {
t.Errorf("APObject Id '%v' different than expected '%v'", o.ID, testValue)
}
if o.Type != OrganizationType {
t.Errorf("APObject Type '%v' different than expected '%v'", o.Type, OrganizationType)
}
}
func TestServiceNew(t *testing.T) {
var testValue = ID("test")
o := ServiceNew(testValue)
if o.ID != testValue {
t.Errorf("APObject Id '%v' different than expected '%v'", o.ID, testValue)
}
if o.Type != ServiceType {
t.Errorf("APObject Type '%v' different than expected '%v'", o.Type, ServiceType)
}
}
func TestActor_IsLink(t *testing.T) {
m := ActorNew("test", ActorType)
if m.IsLink() {
t.Errorf("%#v should not be a valid Link", m.Type)
}
}
func TestActor_IsObject(t *testing.T) {
m := ActorNew("test", ActorType)
if !m.IsObject() {
t.Errorf("%#v should be a valid object", m.Type)
}
}
func TestActor_Object(t *testing.T) {
m := ActorNew("test", ActorType)
if reflect.DeepEqual(ID(""), m.GetID()) {
t.Errorf("%#v should not be an empty activity pub object", m.GetID())
}
}
func TestActor_Type(t *testing.T) {
m := ActorNew("test", ActorType)
if m.GetType() != ActorType {
t.Errorf("%#v should be an empty Link object", m.GetType())
}
}
func TestPerson_IsLink(t *testing.T) {
m := PersonNew("test")
if m.IsLink() {
t.Errorf("%T should not be a valid Link", m)
}
}
func TestPerson_IsObject(t *testing.T) {
m := PersonNew("test")
if !m.IsObject() {
t.Errorf("%T should be a valid object", m)
}
}
func TestActor_UnmarshalJSON(t *testing.T) {
t.Skipf("TODO")
}
func TestActor_GetActor(t *testing.T) {
t.Skipf("TODO")
}
func TestActor_GetID(t *testing.T) {
t.Skipf("TODO")
}
func TestActor_GetLink(t *testing.T) {
t.Skipf("TODO")
}
func TestActor_GetType(t *testing.T) {
t.Skipf("TODO")
}
func TestApplication_GetActor(t *testing.T) {
t.Skipf("TODO")
}
func TestApplication_GetID(t *testing.T) {
t.Skipf("TODO")
}
func TestApplication_GetLink(t *testing.T) {
t.Skipf("TODO")
}
func TestApplication_GetType(t *testing.T) {
t.Skipf("TODO")
}
func TestApplication_IsLink(t *testing.T) {
t.Skipf("TODO")
}
func TestApplication_IsObject(t *testing.T) {
t.Skipf("TODO")
}
func TestGroup_GetActor(t *testing.T) {
t.Skipf("TODO")
}
func TestGroup_GetID(t *testing.T) {
t.Skipf("TODO")
}
func TestGroup_GetLink(t *testing.T) {
t.Skipf("TODO")
}
func TestGroup_GetType(t *testing.T) {
t.Skipf("TODO")
}
func TestGroup_IsLink(t *testing.T) {
t.Skipf("TODO")
}
func TestGroup_IsObject(t *testing.T) {
t.Skipf("TODO")
}
func TestOrganization_GetActor(t *testing.T) {
t.Skipf("TODO")
}
func TestOrganization_GetID(t *testing.T) {
t.Skipf("TODO")
}
func TestOrganization_GetLink(t *testing.T) {
t.Skipf("TODO")
}
func TestOrganization_GetType(t *testing.T) {
t.Skipf("TODO")
}
func TestOrganization_IsLink(t *testing.T) {
t.Skipf("TODO")
}
func TestOrganization_IsObject(t *testing.T) {
t.Skipf("TODO")
}
func TestPerson_GetActor(t *testing.T) {
t.Skipf("TODO")
}
func TestPerson_GetID(t *testing.T) {
t.Skipf("TODO")
}
func TestPerson_GetLink(t *testing.T) {
t.Skipf("TODO")
}
func TestPerson_GetType(t *testing.T) {
t.Skipf("TODO")
}
func validateEmptyPerson(p Person, t *testing.T) {
if p.ID != "" {
t.Errorf("Unmarshaled object %T should have empty ID, received %q", p, p.ID)
}
if p.Type != "" {
t.Errorf("Unmarshaled object %T should have empty Type, received %q", p, p.Type)
}
if p.AttributedTo != nil {
t.Errorf("Unmarshaled object %T should have empty AttributedTo, received %q", p, p.AttributedTo)
}
if len(p.Name) != 0 {
t.Errorf("Unmarshaled object %T should have empty Name, received %q", p, p.Name)
}
if len(p.Summary) != 0 {
t.Errorf("Unmarshaled object %T should have empty Summary, received %q", p, p.Summary)
}
if len(p.Content) != 0 {
t.Errorf("Unmarshaled object %T should have empty Content, received %q", p, p.Content)
}
if p.URL != nil {
t.Errorf("Unmarshaled object %T should have empty URL, received %v", p, p.URL)
}
if !p.Published.IsZero() {
t.Errorf("Unmarshaled object %T should have empty Published, received %q", p, p.Published)
}
if !p.StartTime.IsZero() {
t.Errorf("Unmarshaled object %T should have empty StartTime, received %q", p, p.StartTime)
}
if !p.Updated.IsZero() {
t.Errorf("Unmarshaled object %T should have empty Updated, received %q", p, p.Updated)
}
}
func TestPerson_UnmarshalJSON(t *testing.T) {
p := Person{}
dataEmpty := []byte("{}")
p.UnmarshalJSON(dataEmpty)
validateEmptyPerson(p, t)
}
func TestApplication_UnmarshalJSON(t *testing.T) {
a := Application{}
dataEmpty := []byte("{}")
a.UnmarshalJSON(dataEmpty)
validateEmptyPerson(Person(a), t)
}
func TestGroup_UnmarshalJSON(t *testing.T) {
g := Group{}
dataEmpty := []byte("{}")
g.UnmarshalJSON(dataEmpty)
validateEmptyPerson(Person(g), t)
}
func TestOrganization_UnmarshalJSON(t *testing.T) {
o := Organization{}
dataEmpty := []byte("{}")
o.UnmarshalJSON(dataEmpty)
validateEmptyPerson(Person(o), t)
}
func TestService_UnmarshalJSON(t *testing.T) {
s := Service{}
dataEmpty := []byte("{}")
s.UnmarshalJSON(dataEmpty)
validateEmptyPerson(Person(s), t)
}
func TestService_GetActor(t *testing.T) {
t.Skipf("TODO")
}
func TestService_GetID(t *testing.T) {
t.Skipf("TODO")
}
func TestService_GetLink(t *testing.T) {
t.Skipf("TODO")
}
func TestService_GetType(t *testing.T) {
t.Skipf("TODO")
}
func TestService_IsLink(t *testing.T) {
t.Skipf("TODO")
}
func TestService_IsObject(t *testing.T) {
t.Skipf("TODO")
}
func TestToPerson(t *testing.T) {
t.Skipf("TODO")
}
func TestEndpoints_UnmarshalJSON(t *testing.T) {
t.Skipf("TODO")
}
func TestActor_Clean(t *testing.T) {
t.Skipf("TODO")
}
func TestToActor(t *testing.T) {
t.Skipf("TODO")
}
func TestActor_IsCollection(t *testing.T) {
t.Skipf("TODO")
}
func TestActor_Recipients(t *testing.T) {
t.Skipf("TODO")
}
func TestPublicKey_UnmarshalJSON(t *testing.T) {
t.Skipf("TODO")
}
func TestActor_MarshalJSON(t *testing.T) {
t.Skipf("TODO")
}
func TestEndpoints_MarshalJSON(t *testing.T) {
t.Skipf("TODO")
}
func TestPublicKey_MarshalJSON(t *testing.T) {
t.Skipf("TODO")
}
func assertPersonWithTesting(fn canErrorFunc, expected Item) WithActorFn {
return func(p *Person) error {
if !assertDeepEquals(fn, p, expected) {
return fmt.Errorf("not equal")
}
return nil
}
}
func TestOnActor(t *testing.T) {
testPerson := Actor{
ID: "https://example.com",
}
type args struct {
it Item
fn func(canErrorFunc, Item) WithActorFn
}
tests := []struct {
name string
args args
expected Item
wantErr bool
}{
{
name: "single",
args: args{testPerson, assertPersonWithTesting},
expected: &testPerson,
wantErr: false,
},
{
name: "single fails",
args: args{Person{ID: "https://not-equals"}, assertPersonWithTesting},
expected: &testPerson,
wantErr: true,
},
{
name: "collectionOfPersons",
args: args{ItemCollection{testPerson, testPerson}, assertPersonWithTesting},
expected: &testPerson,
wantErr: false,
},
{
name: "collectionOfPersons fails",
args: args{ItemCollection{testPerson, Person{ID: "https://not-equals"}}, assertPersonWithTesting},
expected: &testPerson,
wantErr: true,
},
}
for _, tt := range tests {
var logFn canErrorFunc
if tt.wantErr {
logFn = t.Logf
} else {
logFn = t.Errorf
}
t.Run(tt.name, func(t *testing.T) {
if err := OnActor(tt.args.it, tt.args.fn(logFn, tt.expected)); (err != nil) != tt.wantErr {
t.Errorf("OnPerson() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}
func TestActor_Equals(t *testing.T) {
type fields struct {
ID ID
Type ActivityVocabularyType
Name NaturalLanguageValues
Attachment Item
AttributedTo Item
Audience ItemCollection
Content NaturalLanguageValues
Context Item
MediaType MimeType
EndTime time.Time
Generator Item
Icon Item
Image Item
InReplyTo Item
Location Item
Preview Item
Published time.Time
Replies Item
StartTime time.Time
Summary NaturalLanguageValues
Tag ItemCollection
Updated time.Time
URL Item
To ItemCollection
Bto ItemCollection
CC ItemCollection
BCC ItemCollection
Duration time.Duration
Likes Item
Shares Item
Source Source
Inbox Item
Outbox Item
Following Item
Followers Item
Liked Item
PreferredUsername NaturalLanguageValues
Endpoints *Endpoints
Streams ItemCollection
PublicKey PublicKey
}
tests := []struct {
name string
fields fields
arg Item
want bool
}{
{
name: "equal-empty-actor",
fields: fields{},
arg: Actor{},
want: true,
},
{
name: "equal-actor-just-id",
fields: fields{ID: "test"},
arg: Actor{ID: "test"},
want: true,
},
{
name: "equal-actor-id",
fields: fields{ID: "test", URL: IRI("example.com")},
arg: Actor{ID: "test"},
want: true,
},
{
name: "equal-false-with-id-and-url",
fields: fields{ID: "test"},
arg: Actor{ID: "test", URL: IRI("example.com")},
want: false,
},
{
name: "not a valid actor",
fields: fields{ID: "http://example.com"},
arg: Activity{ID: "http://example.com"},
want: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
a := Actor{
ID: tt.fields.ID,
Type: tt.fields.Type,
Name: tt.fields.Name,
Attachment: tt.fields.Attachment,
AttributedTo: tt.fields.AttributedTo,
Audience: tt.fields.Audience,
Content: tt.fields.Content,
Context: tt.fields.Context,
MediaType: tt.fields.MediaType,
EndTime: tt.fields.EndTime,
Generator: tt.fields.Generator,
Icon: tt.fields.Icon,
Image: tt.fields.Image,
InReplyTo: tt.fields.InReplyTo,
Location: tt.fields.Location,
Preview: tt.fields.Preview,
Published: tt.fields.Published,
Replies: tt.fields.Replies,
StartTime: tt.fields.StartTime,
Summary: tt.fields.Summary,
Tag: tt.fields.Tag,
Updated: tt.fields.Updated,
URL: tt.fields.URL,
To: tt.fields.To,
Bto: tt.fields.Bto,
CC: tt.fields.CC,
BCC: tt.fields.BCC,
Duration: tt.fields.Duration,
Likes: tt.fields.Likes,
Shares: tt.fields.Shares,
Source: tt.fields.Source,
Inbox: tt.fields.Inbox,
Outbox: tt.fields.Outbox,
Following: tt.fields.Following,
Followers: tt.fields.Followers,
Liked: tt.fields.Liked,
PreferredUsername: tt.fields.PreferredUsername,
Endpoints: tt.fields.Endpoints,
Streams: tt.fields.Streams,
PublicKey: tt.fields.PublicKey,
}
if got := a.Equals(tt.arg); got != tt.want {
t.Errorf("Equals() = %v, want %v", got, tt.want)
}
})
}
}