1// Copyright (c) 2015 Ableton AG, Berlin. All rights reserved.
2//
3// Use of this source code is governed by a BSD-style
4// license that can be found in the LICENSE file.
5
6// +build integration
7
8package travis
9
10import (
11	"context"
12	"net/http"
13	"reflect"
14	"testing"
15)
16
17const integrationPreferenceName = "build_emails"
18
19func TestPreferencesService_Integration_Find(t *testing.T) {
20	preference, res, err := integrationClient.Preferences.Find(context.TODO(), integrationPreferenceName)
21
22	if err != nil {
23		t.Fatalf("Preference.Find unexpected error occured: %s", err)
24	}
25
26	if res.StatusCode != http.StatusOK {
27		t.Fatalf("Preference.Find invalid http status: %s", res.Status)
28	}
29
30	want := &Preference{
31		Name:     integrationPreferenceName,
32		Value:    true,
33		Metadata: &Metadata{Type: "preference", Href: "/v3/preference/build_emails", Representation: "standard"},
34	}
35
36	if !reflect.DeepEqual(preference, want) {
37		t.Errorf("Preference.Find returned %+v, want %+v", preference, want)
38	}
39}
40
41func TestPreferencesService_Integration_List(t *testing.T) {
42	preferences, res, err := integrationClient.Preferences.List(context.TODO())
43
44	if err != nil {
45		t.Fatalf("Preferences.List unexpected error occured: %s", err)
46	}
47
48	if res.StatusCode != http.StatusOK {
49		t.Fatalf("Preferences.List invalid http status: %s", res.Status)
50	}
51
52	want := []*Preference{
53		{
54			Name:     "build_emails",
55			Value:    true,
56			Metadata: &Metadata{Type: "preference", Href: "/v3/preference/build_emails", Representation: "standard"},
57		},
58		{
59			Name:     "private_insights_visibility",
60			Value:    "private",
61			Metadata: &Metadata{Type: "preference", Href: "/v3/preference/private_insights_visibility", Representation: "standard"},
62		},
63	}
64
65	if !reflect.DeepEqual(preferences, want) {
66		t.Errorf("Preferences.Find returned %+v, want %+v", preferences, want)
67	}
68}
69
70func TestPreferenceServices_Integration_Update(t *testing.T) {
71	// Change build_emails = false
72	preference, res, err := integrationClient.Preferences.Update(context.TODO(), &Preference{Name: integrationPreferenceName, Value: false})
73
74	if err != nil {
75		t.Fatalf("Preference.Update unexpected error occured: %s", err)
76	}
77
78	if res.StatusCode != http.StatusOK {
79		t.Fatalf("Preference.Update invalid http status: %s", res.Status)
80	}
81
82	want := &Preference{
83		Name:     integrationPreferenceName,
84		Value:    false,
85		Metadata: &Metadata{Type: "preference", Href: "/v3/preference/build_emails", Representation: "standard"},
86	}
87
88	if !reflect.DeepEqual(preference, want) {
89		t.Errorf("Preference.Update returned %+v, want %+v", preference, want)
90	}
91
92	// Change build_emails = true
93	preference, res, err = integrationClient.Preferences.Update(context.TODO(), &Preference{Name: integrationPreferenceName, Value: true})
94
95	if err != nil {
96		t.Fatalf("Preference.Update unexpected error occured: %s", err)
97	}
98
99	if res.StatusCode != http.StatusOK {
100		t.Fatalf("Preference.Update invalid http status: %s", res.Status)
101	}
102
103	want = &Preference{
104		Name:     integrationPreferenceName,
105		Value:    true,
106		Metadata: &Metadata{Type: "preference", Href: "/v3/preference/build_emails", Representation: "standard"},
107	}
108	if !reflect.DeepEqual(preference, want) {
109		t.Errorf("Preference.Update returned %+v, want %+v", preference, want)
110	}
111}
112