mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-31 14:31:02 +00:00 
			
		
		
		
	- Massive replacement of changing `code.gitea.io/gitea` to `forgejo.org`. - Resolves forgejo/discussions#258 Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/7337 Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org> Reviewed-by: Michael Kriese <michael.kriese@gmx.de> Reviewed-by: Beowulf <beowulf@beocode.eu> Reviewed-by: Panagiotis "Ivory" Vasilopoulos <git@n0toose.net> Co-authored-by: Gusted <postmaster@gusted.xyz> Co-committed-by: Gusted <postmaster@gusted.xyz>
		
			
				
	
	
		
			145 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2023 The Forgejo Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package forgefed
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"reflect"
 | |
| 	"testing"
 | |
| 
 | |
| 	"forgejo.org/modules/json"
 | |
| 
 | |
| 	ap "github.com/go-ap/activitypub"
 | |
| )
 | |
| 
 | |
| func Test_RepositoryMarshalJSON(t *testing.T) {
 | |
| 	type testPair struct {
 | |
| 		item    Repository
 | |
| 		want    []byte
 | |
| 		wantErr error
 | |
| 	}
 | |
| 
 | |
| 	tests := map[string]testPair{
 | |
| 		"empty": {
 | |
| 			item: Repository{},
 | |
| 			want: nil,
 | |
| 		},
 | |
| 		"with ID": {
 | |
| 			item: Repository{
 | |
| 				Actor: ap.Actor{
 | |
| 					ID: "https://example.com/1",
 | |
| 				},
 | |
| 				Team: nil,
 | |
| 			},
 | |
| 			want: []byte(`{"id":"https://example.com/1"}`),
 | |
| 		},
 | |
| 		"with Team as IRI": {
 | |
| 			item: Repository{
 | |
| 				Team: ap.IRI("https://example.com/1"),
 | |
| 				Actor: ap.Actor{
 | |
| 					ID: "https://example.com/1",
 | |
| 				},
 | |
| 			},
 | |
| 			want: []byte(`{"id":"https://example.com/1","team":"https://example.com/1"}`),
 | |
| 		},
 | |
| 		"with Team as IRIs": {
 | |
| 			item: Repository{
 | |
| 				Team: ap.ItemCollection{
 | |
| 					ap.IRI("https://example.com/1"),
 | |
| 					ap.IRI("https://example.com/2"),
 | |
| 				},
 | |
| 				Actor: ap.Actor{
 | |
| 					ID: "https://example.com/1",
 | |
| 				},
 | |
| 			},
 | |
| 			want: []byte(`{"id":"https://example.com/1","team":["https://example.com/1","https://example.com/2"]}`),
 | |
| 		},
 | |
| 		"with Team as Object": {
 | |
| 			item: Repository{
 | |
| 				Team: ap.Object{ID: "https://example.com/1"},
 | |
| 				Actor: ap.Actor{
 | |
| 					ID: "https://example.com/1",
 | |
| 				},
 | |
| 			},
 | |
| 			want: []byte(`{"id":"https://example.com/1","team":{"id":"https://example.com/1"}}`),
 | |
| 		},
 | |
| 		"with Team as slice of Objects": {
 | |
| 			item: Repository{
 | |
| 				Team: ap.ItemCollection{
 | |
| 					ap.Object{ID: "https://example.com/1"},
 | |
| 					ap.Object{ID: "https://example.com/2"},
 | |
| 				},
 | |
| 				Actor: ap.Actor{
 | |
| 					ID: "https://example.com/1",
 | |
| 				},
 | |
| 			},
 | |
| 			want: []byte(`{"id":"https://example.com/1","team":[{"id":"https://example.com/1"},{"id":"https://example.com/2"}]}`),
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	for name, tt := range tests {
 | |
| 		t.Run(name, func(t *testing.T) {
 | |
| 			got, err := tt.item.MarshalJSON()
 | |
| 			if (err != nil || tt.wantErr != nil) && tt.wantErr.Error() != err.Error() {
 | |
| 				t.Errorf("MarshalJSON() error = \"%v\", wantErr \"%v\"", err, tt.wantErr)
 | |
| 				return
 | |
| 			}
 | |
| 			if !reflect.DeepEqual(got, tt.want) {
 | |
| 				t.Errorf("MarshalJSON() got = %q, want %q", got, tt.want)
 | |
| 			}
 | |
| 		})
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func Test_RepositoryUnmarshalJSON(t *testing.T) {
 | |
| 	type testPair struct {
 | |
| 		data    []byte
 | |
| 		want    *Repository
 | |
| 		wantErr error
 | |
| 	}
 | |
| 
 | |
| 	tests := map[string]testPair{
 | |
| 		"nil": {
 | |
| 			data:    nil,
 | |
| 			wantErr: fmt.Errorf("cannot parse JSON: %w", fmt.Errorf("cannot parse empty string; unparsed tail: %q", "")),
 | |
| 		},
 | |
| 		"empty": {
 | |
| 			data:    []byte{},
 | |
| 			wantErr: fmt.Errorf("cannot parse JSON: %w", fmt.Errorf("cannot parse empty string; unparsed tail: %q", "")),
 | |
| 		},
 | |
| 		"with Type": {
 | |
| 			data: []byte(`{"type":"Repository"}`),
 | |
| 			want: &Repository{
 | |
| 				Actor: ap.Actor{
 | |
| 					Type: RepositoryType,
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 		"with Type and ID": {
 | |
| 			data: []byte(`{"id":"https://example.com/1","type":"Repository"}`),
 | |
| 			want: &Repository{
 | |
| 				Actor: ap.Actor{
 | |
| 					ID:   "https://example.com/1",
 | |
| 					Type: RepositoryType,
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	for name, tt := range tests {
 | |
| 		t.Run(name, func(t *testing.T) {
 | |
| 			got := new(Repository)
 | |
| 			err := got.UnmarshalJSON(tt.data)
 | |
| 			if (err != nil || tt.wantErr != nil) && tt.wantErr.Error() != err.Error() {
 | |
| 				t.Errorf("UnmarshalJSON() error = \"%v\", wantErr \"%v\"", err, tt.wantErr)
 | |
| 				return
 | |
| 			}
 | |
| 			if tt.want != nil && !reflect.DeepEqual(got, tt.want) {
 | |
| 				jGot, _ := json.Marshal(got)
 | |
| 				jWant, _ := json.Marshal(tt.want)
 | |
| 				t.Errorf("UnmarshalJSON() got = %s, want %s", jGot, jWant)
 | |
| 			}
 | |
| 		})
 | |
| 	}
 | |
| }
 |