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