1// Copyright 2017 The go-github AUTHORS. 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
6package github
7
8import (
9	"context"
10	"fmt"
11	"net/http"
12	"testing"
13
14	"github.com/google/go-cmp/cmp"
15)
16
17func TestUsersService_ListBlockedUsers(t *testing.T) {
18	client, mux, _, teardown := setup()
19	defer teardown()
20
21	mux.HandleFunc("/user/blocks", func(w http.ResponseWriter, r *http.Request) {
22		testMethod(t, r, "GET")
23		testHeader(t, r, "Accept", mediaTypeBlockUsersPreview)
24		testFormValues(t, r, values{"page": "2"})
25		fmt.Fprint(w, `[{
26			"login": "octocat"
27		}]`)
28	})
29
30	opt := &ListOptions{Page: 2}
31	ctx := context.Background()
32	blockedUsers, _, err := client.Users.ListBlockedUsers(ctx, opt)
33	if err != nil {
34		t.Errorf("Users.ListBlockedUsers returned error: %v", err)
35	}
36
37	want := []*User{{Login: String("octocat")}}
38	if !cmp.Equal(blockedUsers, want) {
39		t.Errorf("Users.ListBlockedUsers returned %+v, want %+v", blockedUsers, want)
40	}
41
42	const methodName = "ListBlockedUsers"
43	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
44		got, resp, err := client.Users.ListBlockedUsers(ctx, opt)
45		if got != nil {
46			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
47		}
48		return resp, err
49	})
50}
51
52func TestUsersService_IsBlocked(t *testing.T) {
53	client, mux, _, teardown := setup()
54	defer teardown()
55
56	mux.HandleFunc("/user/blocks/u", func(w http.ResponseWriter, r *http.Request) {
57		testMethod(t, r, "GET")
58		testHeader(t, r, "Accept", mediaTypeBlockUsersPreview)
59		w.WriteHeader(http.StatusNoContent)
60	})
61
62	ctx := context.Background()
63	isBlocked, _, err := client.Users.IsBlocked(ctx, "u")
64	if err != nil {
65		t.Errorf("Users.IsBlocked returned error: %v", err)
66	}
67	if want := true; isBlocked != want {
68		t.Errorf("Users.IsBlocked returned %+v, want %+v", isBlocked, want)
69	}
70
71	const methodName = "IsBlocked"
72	testBadOptions(t, methodName, func() (err error) {
73		_, _, err = client.Users.IsBlocked(ctx, "\n")
74		return err
75	})
76
77	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
78		got, resp, err := client.Users.IsBlocked(ctx, "u")
79		if got {
80			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
81		}
82		return resp, err
83	})
84}
85
86func TestUsersService_BlockUser(t *testing.T) {
87	client, mux, _, teardown := setup()
88	defer teardown()
89
90	mux.HandleFunc("/user/blocks/u", func(w http.ResponseWriter, r *http.Request) {
91		testMethod(t, r, "PUT")
92		testHeader(t, r, "Accept", mediaTypeBlockUsersPreview)
93		w.WriteHeader(http.StatusNoContent)
94	})
95
96	ctx := context.Background()
97	_, err := client.Users.BlockUser(ctx, "u")
98	if err != nil {
99		t.Errorf("Users.BlockUser returned error: %v", err)
100	}
101
102	const methodName = "BlockUser"
103	testBadOptions(t, methodName, func() (err error) {
104		_, err = client.Users.BlockUser(ctx, "\n")
105		return err
106	})
107
108	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
109		return client.Users.BlockUser(ctx, "u")
110	})
111}
112
113func TestUsersService_UnblockUser(t *testing.T) {
114	client, mux, _, teardown := setup()
115	defer teardown()
116
117	mux.HandleFunc("/user/blocks/u", func(w http.ResponseWriter, r *http.Request) {
118		testMethod(t, r, "DELETE")
119		testHeader(t, r, "Accept", mediaTypeBlockUsersPreview)
120		w.WriteHeader(http.StatusNoContent)
121	})
122
123	ctx := context.Background()
124	_, err := client.Users.UnblockUser(ctx, "u")
125	if err != nil {
126		t.Errorf("Users.UnblockUser returned error: %v", err)
127	}
128
129	const methodName = "UnblockUser"
130	testBadOptions(t, methodName, func() (err error) {
131		_, err = client.Users.UnblockUser(ctx, "\n")
132		return err
133	})
134
135	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
136		return client.Users.UnblockUser(ctx, "u")
137	})
138}
139