package response

import (
	"encoding/json"
	"testing"
)

func prettyJSON(o interface{}) (string, error) {
	bytes, err := json.MarshalIndent(o, "", "\t")
	if err != nil {
		return "", err
	}
	return string(bytes), nil
}

func TestNewPaginationMeta(t *testing.T) {
	type args struct {
		offset     int
		limit      int
		hasMore    bool
		currentURL string
	}
	tests := []struct {
		name     string
		args     args
		wantJSON string
	}{
		{
			name: "first page",
			args: args{0, 10, true, "http://foo.com/v1/bar"},
			wantJSON: `{
	"limit": 10,
	"current_offset": 0,
	"next_offset": 10,
	"next_url": "http://foo.com/v1/bar?offset=10"
}`,
		},
		{
			name: "second page",
			args: args{10, 10, true, "http://foo.com/v1/bar"},
			wantJSON: `{
	"limit": 10,
	"current_offset": 10,
	"next_offset": 20,
	"prev_offset": 0,
	"next_url": "http://foo.com/v1/bar?offset=20",
	"prev_url": "http://foo.com/v1/bar"
}`,
		},
		{
			name: "last page",
			args: args{40, 10, false, "http://foo.com/v1/bar"},
			wantJSON: `{
	"limit": 10,
	"current_offset": 40,
	"prev_offset": 30,
	"prev_url": "http://foo.com/v1/bar?offset=30"
}`,
		},
		{
			name: "misaligned start ending exactly on boundary",
			args: args{32, 10, false, "http://foo.com/v1/bar"},
			wantJSON: `{
	"limit": 10,
	"current_offset": 32,
	"prev_offset": 22,
	"prev_url": "http://foo.com/v1/bar?offset=22"
}`,
		},
		{
			name: "misaligned start partially through first page",
			args: args{5, 12, true, "http://foo.com/v1/bar"},
			wantJSON: `{
	"limit": 12,
	"current_offset": 5,
	"next_offset": 17,
	"prev_offset": 0,
	"next_url": "http://foo.com/v1/bar?offset=17",
	"prev_url": "http://foo.com/v1/bar"
}`,
		},
		{
			name: "no current URL",
			args: args{10, 10, true, ""},
			wantJSON: `{
	"limit": 10,
	"current_offset": 10,
	"next_offset": 20,
	"prev_offset": 0
}`,
		},
		{
			name: "#58 regression test",
			args: args{1, 3, true, ""},
			wantJSON: `{
	"limit": 3,
	"current_offset": 1,
	"next_offset": 4,
	"prev_offset": 0
}`,
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			got := NewPaginationMeta(tt.args.offset, tt.args.limit, tt.args.hasMore,
				tt.args.currentURL)
			gotJSON, err := prettyJSON(got)
			if err != nil {
				t.Fatalf("failed to marshal PaginationMeta to JSON: %s", err)
			}
			if gotJSON != tt.wantJSON {
				// prettyJSON makes debugging easier due to the annoying pointer-to-ints, but it
				// also implicitly tests JSON marshalling as we can see if it's omitting fields etc.
				t.Fatalf("NewPaginationMeta() =\n%s\n  want:\n%s\n", gotJSON, tt.wantJSON)
			}
		})
	}
}
