415 lines
10 KiB
Go
415 lines
10 KiB
Go
package activitypub
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestItemCollection_Append(t *testing.T) {
|
|
t.Skipf("TODO")
|
|
}
|
|
|
|
func TestItemCollection_Collection(t *testing.T) {
|
|
t.Skipf("TODO")
|
|
}
|
|
|
|
func TestItemCollection_GetID(t *testing.T) {
|
|
t.Skipf("TODO")
|
|
}
|
|
|
|
func TestItemCollection_GetLink(t *testing.T) {
|
|
t.Skipf("TODO")
|
|
}
|
|
|
|
func TestItemCollection_GetType(t *testing.T) {
|
|
t.Skipf("TODO")
|
|
}
|
|
|
|
func TestItemCollection_IsLink(t *testing.T) {
|
|
t.Skipf("TODO")
|
|
}
|
|
|
|
func TestItemCollection_IsObject(t *testing.T) {
|
|
t.Skipf("TODO")
|
|
}
|
|
|
|
func TestItemCollection_First(t *testing.T) {
|
|
t.Skipf("TODO")
|
|
}
|
|
|
|
func TestItemCollection_Count(t *testing.T) {
|
|
t.Skipf("TODO")
|
|
}
|
|
|
|
func TestItemCollection_Contains(t *testing.T) {
|
|
t.Skipf("TODO")
|
|
}
|
|
|
|
func TestItemCollection_IsCollection(t *testing.T) {
|
|
t.Skipf("TODO")
|
|
}
|
|
|
|
func TestToItemCollection(t *testing.T) {
|
|
t.Skipf("TODO")
|
|
}
|
|
|
|
func TestItemCollection_Remove(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
i ItemCollection
|
|
arg Item
|
|
}{
|
|
{
|
|
name: "empty_collection_nil_item",
|
|
i: ItemCollection{},
|
|
arg: nil,
|
|
},
|
|
{
|
|
name: "empty_collection_non_nil_item",
|
|
i: ItemCollection{},
|
|
arg: &Object{},
|
|
},
|
|
{
|
|
name: "non_empty_collection_nil_item",
|
|
i: ItemCollection{
|
|
&Object{ID: "test"},
|
|
},
|
|
arg: nil,
|
|
},
|
|
{
|
|
name: "non_empty_collection_non_contained_item_empty_ID",
|
|
i: ItemCollection{
|
|
&Object{ID: "test"},
|
|
},
|
|
arg: &Object{},
|
|
},
|
|
{
|
|
name: "non_empty_collection_non_contained_item",
|
|
i: ItemCollection{
|
|
&Object{ID: "test"},
|
|
},
|
|
arg: &Object{ID: "test123"},
|
|
},
|
|
{
|
|
name: "non_empty_collection_just_contained_item",
|
|
i: ItemCollection{
|
|
&Object{ID: "test"},
|
|
},
|
|
arg: &Object{ID: "test"},
|
|
},
|
|
{
|
|
name: "non_empty_collection_contained_item_first_pos",
|
|
i: ItemCollection{
|
|
&Object{ID: "test"},
|
|
&Object{ID: "test123"},
|
|
},
|
|
arg: &Object{ID: "test"},
|
|
},
|
|
{
|
|
name: "non_empty_collection_contained_item_not_first_pos",
|
|
i: ItemCollection{
|
|
&Object{ID: "test123"},
|
|
&Object{ID: "test"},
|
|
&Object{ID: "test321"},
|
|
},
|
|
arg: &Object{ID: "test"},
|
|
},
|
|
{
|
|
name: "non_empty_collection_contained_item_last_pos",
|
|
i: ItemCollection{
|
|
&Object{ID: "test123"},
|
|
&Object{ID: "test"},
|
|
},
|
|
arg: &Object{ID: "test"},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
origContains := tt.i.Contains(tt.arg)
|
|
origLen := tt.i.Count()
|
|
should := ""
|
|
does := "n't"
|
|
if origContains {
|
|
should = "n't"
|
|
does = ""
|
|
}
|
|
|
|
tt.i.Remove(tt.arg)
|
|
if tt.i.Contains(tt.arg) {
|
|
t.Errorf("%T should%s contain %T, but it does%s: %#v", tt.i, should, tt.arg, does, tt.i)
|
|
}
|
|
if origContains {
|
|
if tt.i.Count() > origLen-1 {
|
|
t.Errorf("%T should have a count lower than %d, got %d", tt.i, origLen, tt.i.Count())
|
|
}
|
|
} else {
|
|
if tt.i.Count() != origLen {
|
|
t.Errorf("%T should have a count equal to %d, got %d", tt.i, origLen, tt.i.Count())
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestItemCollectionDeduplication(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
args []*ItemCollection
|
|
want ItemCollection
|
|
remaining []*ItemCollection
|
|
}{
|
|
{
|
|
name: "empty",
|
|
},
|
|
{
|
|
name: "no-overlap",
|
|
args: []*ItemCollection{
|
|
{
|
|
IRI("https://example.com"),
|
|
IRI("https://example.com/2"),
|
|
},
|
|
{
|
|
IRI("https://example.com/1"),
|
|
},
|
|
},
|
|
want: ItemCollection{
|
|
IRI("https://example.com"),
|
|
IRI("https://example.com/2"),
|
|
IRI("https://example.com/1"),
|
|
},
|
|
remaining: []*ItemCollection{
|
|
{
|
|
IRI("https://example.com"),
|
|
IRI("https://example.com/2"),
|
|
},
|
|
{
|
|
IRI("https://example.com/1"),
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "some-overlap",
|
|
args: []*ItemCollection{
|
|
{
|
|
IRI("https://example.com"),
|
|
IRI("https://example.com/2"),
|
|
},
|
|
{
|
|
IRI("https://example.com/1"),
|
|
IRI("https://example.com/2"),
|
|
},
|
|
},
|
|
want: ItemCollection{
|
|
IRI("https://example.com"),
|
|
IRI("https://example.com/2"),
|
|
IRI("https://example.com/1"),
|
|
},
|
|
remaining: []*ItemCollection{
|
|
{
|
|
IRI("https://example.com"),
|
|
IRI("https://example.com/2"),
|
|
},
|
|
{
|
|
IRI("https://example.com/1"),
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "test from spammy",
|
|
args: []*ItemCollection{
|
|
{
|
|
IRI("https://example.dev/a801139a-0d9a-4703-b0a5-9d14ae1438e4/followers"),
|
|
IRI("https://www.w3.org/ns/activitystreams#Public"),
|
|
},
|
|
{
|
|
IRI("https://example.dev/a801139a-0d9a-4703-b0a5-9d14ae1438e4"),
|
|
},
|
|
{
|
|
IRI("https://example.dev"),
|
|
IRI("https://example.dev/a801139a-0d9a-4703-b0a5-9d14ae1438e4"),
|
|
IRI("https://www.w3.org/ns/activitystreams#Public"),
|
|
},
|
|
},
|
|
want: ItemCollection{
|
|
IRI("https://example.dev/a801139a-0d9a-4703-b0a5-9d14ae1438e4/followers"),
|
|
IRI("https://www.w3.org/ns/activitystreams#Public"),
|
|
IRI("https://example.dev/a801139a-0d9a-4703-b0a5-9d14ae1438e4"),
|
|
IRI("https://example.dev"),
|
|
},
|
|
remaining: []*ItemCollection{
|
|
{
|
|
IRI("https://example.dev/a801139a-0d9a-4703-b0a5-9d14ae1438e4/followers"),
|
|
IRI("https://www.w3.org/ns/activitystreams#Public"),
|
|
},
|
|
{
|
|
IRI("https://example.dev/a801139a-0d9a-4703-b0a5-9d14ae1438e4"),
|
|
},
|
|
{
|
|
IRI("https://example.dev"),
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "different order for spammy test",
|
|
args: []*ItemCollection{
|
|
{
|
|
IRI("https://example.dev/a801139a-0d9a-4703-b0a5-9d14ae1438e4/followers"),
|
|
IRI("https://www.w3.org/ns/activitystreams#Public"),
|
|
},
|
|
{
|
|
IRI("https://example.dev"),
|
|
IRI("https://example.dev/a801139a-0d9a-4703-b0a5-9d14ae1438e4"),
|
|
IRI("https://www.w3.org/ns/activitystreams#Public"),
|
|
},
|
|
{
|
|
IRI("https://example.dev/a801139a-0d9a-4703-b0a5-9d14ae1438e4"),
|
|
},
|
|
},
|
|
want: ItemCollection{
|
|
IRI("https://example.dev/a801139a-0d9a-4703-b0a5-9d14ae1438e4/followers"),
|
|
IRI("https://www.w3.org/ns/activitystreams#Public"),
|
|
IRI("https://example.dev/a801139a-0d9a-4703-b0a5-9d14ae1438e4"),
|
|
IRI("https://example.dev"),
|
|
},
|
|
remaining: []*ItemCollection{
|
|
{
|
|
IRI("https://example.dev/a801139a-0d9a-4703-b0a5-9d14ae1438e4/followers"),
|
|
IRI("https://www.w3.org/ns/activitystreams#Public"),
|
|
},
|
|
{
|
|
IRI("https://example.dev"),
|
|
IRI("https://example.dev/a801139a-0d9a-4703-b0a5-9d14ae1438e4"),
|
|
},
|
|
{},
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := ItemCollectionDeduplication(tt.args...); !tt.want.Equals(got) {
|
|
t.Errorf("ItemCollectionDeduplication() = %v, want %v", got, tt.want)
|
|
}
|
|
if len(tt.remaining) != len(tt.args) {
|
|
t.Errorf("ItemCollectionDeduplication() arguments count %d, want %d", len(tt.args), len(tt.remaining))
|
|
}
|
|
for i, remArg := range tt.remaining {
|
|
arg := tt.args[i]
|
|
if !remArg.Equals(arg) {
|
|
t.Errorf("ItemCollectionDeduplication() argument at pos %d = %v, want %v", i, arg, remArg)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestToItemCollection1(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
it Item
|
|
want *ItemCollection
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "empty",
|
|
},
|
|
{
|
|
name: "IRIs to ItemCollection",
|
|
it: IRIs{"https://example.com", "https://example.com/example"},
|
|
want: &ItemCollection{IRI("https://example.com"), IRI("https://example.com/example")},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "ItemCollection to ItemCollection",
|
|
it: ItemCollection{IRI("https://example.com"), IRI("https://example.com/example")},
|
|
want: &ItemCollection{IRI("https://example.com"), IRI("https://example.com/example")},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "*ItemCollection to ItemCollection",
|
|
it: &ItemCollection{IRI("https://example.com"), IRI("https://example.com/example")},
|
|
want: &ItemCollection{IRI("https://example.com"), IRI("https://example.com/example")},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "Collection to ItemCollection",
|
|
it: &Collection{Items: ItemCollection{IRI("https://example.com"), IRI("https://example.com/example")}},
|
|
want: &ItemCollection{IRI("https://example.com"), IRI("https://example.com/example")},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "CollectionPage to ItemCollection",
|
|
it: &CollectionPage{Items: ItemCollection{IRI("https://example.com"), IRI("https://example.com/example")}},
|
|
want: &ItemCollection{IRI("https://example.com"), IRI("https://example.com/example")},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "OrderedCollection to ItemCollection",
|
|
it: &OrderedCollection{OrderedItems: ItemCollection{IRI("https://example.com"), IRI("https://example.com/example")}},
|
|
want: &ItemCollection{IRI("https://example.com"), IRI("https://example.com/example")},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "OrderedCollectionPage to ItemOrderedCollection",
|
|
it: &OrderedCollectionPage{OrderedItems: ItemCollection{IRI("https://example.com"), IRI("https://example.com/example")}},
|
|
want: &ItemCollection{IRI("https://example.com"), IRI("https://example.com/example")},
|
|
wantErr: false,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got, err := ToItemCollection(tt.it)
|
|
if (err != nil) != tt.wantErr {
|
|
t.Errorf("ToItemCollection() error = %v, wantErr %v", err, tt.wantErr)
|
|
return
|
|
}
|
|
if !reflect.DeepEqual(got, tt.want) {
|
|
t.Errorf("ToItemCollection() got = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestItemCollection_IRIs(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
i ItemCollection
|
|
want IRIs
|
|
}{
|
|
{
|
|
name: "empty",
|
|
i: nil,
|
|
want: nil,
|
|
},
|
|
{
|
|
name: "one item",
|
|
i: ItemCollection{
|
|
&Object{ID: "https://example.com"},
|
|
},
|
|
want: IRIs{"https://example.com"},
|
|
},
|
|
{
|
|
name: "two items",
|
|
i: ItemCollection{
|
|
&Object{ID: "https://example.com"},
|
|
&Actor{ID: "https://example.com/~jdoe"},
|
|
},
|
|
want: IRIs{"https://example.com", "https://example.com/~jdoe"},
|
|
},
|
|
{
|
|
name: "mixed items",
|
|
i: ItemCollection{
|
|
&Object{ID: "https://example.com"},
|
|
IRI("https://example.com/666"),
|
|
&Actor{ID: "https://example.com/~jdoe"},
|
|
},
|
|
want: IRIs{"https://example.com", "https://example.com/666", "https://example.com/~jdoe"},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := tt.i.IRIs(); !reflect.DeepEqual(got, tt.want) {
|
|
t.Errorf("IRIs() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|