github.com/google/go-github/v74@v74.0.0/github/sub_issue_test.go (about)

     1  // Copyright 2025 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  
     6  package github
     7  
     8  import (
     9  	"context"
    10  	"encoding/json"
    11  	"fmt"
    12  	"net/http"
    13  	"testing"
    14  
    15  	"github.com/google/go-cmp/cmp"
    16  )
    17  
    18  func TestSubIssuesService_Add(t *testing.T) {
    19  	t.Parallel()
    20  	client, mux, _ := setup(t)
    21  
    22  	input := &SubIssueRequest{SubIssueID: 42}
    23  
    24  	mux.HandleFunc("/repos/o/r/issues/1/sub_issues", func(w http.ResponseWriter, r *http.Request) {
    25  		v := new(SubIssueRequest)
    26  		assertNilError(t, json.NewDecoder(r.Body).Decode(v))
    27  
    28  		testMethod(t, r, "POST")
    29  		if !cmp.Equal(v, input) {
    30  			t.Errorf("Request body = %+v, want %+v", v, input)
    31  		}
    32  
    33  		fmt.Fprint(w, `{"id":42, "number":1}`)
    34  	})
    35  
    36  	ctx := context.Background()
    37  	got, _, err := client.SubIssue.Add(ctx, "o", "r", 1, *input)
    38  	if err != nil {
    39  		t.Errorf("SubIssues.Add returned error: %v", err)
    40  	}
    41  
    42  	want := &SubIssue{Number: Ptr(1), ID: Int64(42)}
    43  	if !cmp.Equal(got, want) {
    44  		t.Errorf("SubIssues.Add = %+v, want %+v", got, want)
    45  	}
    46  
    47  	const methodName = "Add"
    48  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
    49  		got, resp, err := client.SubIssue.Add(ctx, "o", "r", 1, *input)
    50  		if got != nil {
    51  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
    52  		}
    53  		return resp, err
    54  	})
    55  }
    56  
    57  func TestSubIssuesService_ListByIssue(t *testing.T) {
    58  	t.Parallel()
    59  	client, mux, _ := setup(t)
    60  
    61  	mux.HandleFunc("/repos/o/r/issues/1/sub_issues", func(w http.ResponseWriter, r *http.Request) {
    62  		testMethod(t, r, "GET")
    63  
    64  		fmt.Fprint(w, `[{"id":1},{"id":2}]`)
    65  	})
    66  
    67  	ctx := context.Background()
    68  	opt := &IssueListOptions{}
    69  	issues, _, err := client.SubIssue.ListByIssue(ctx, "o", "r", 1, opt)
    70  	if err != nil {
    71  		t.Errorf("SubIssues.ListByIssue returned error: %v", err)
    72  	}
    73  
    74  	want := []*SubIssue{{ID: Int64(1)}, {ID: Int64(2)}}
    75  	if !cmp.Equal(issues, want) {
    76  		t.Errorf("SubIssues.ListByIssue = %+v, want %+v", issues, want)
    77  	}
    78  
    79  	const methodName = "ListByIssue"
    80  	testBadOptions(t, methodName, func() (err error) {
    81  		_, _, err = client.SubIssue.ListByIssue(ctx, "\n", "\n", 1, opt)
    82  		return err
    83  	})
    84  
    85  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
    86  		got, resp, err := client.SubIssue.ListByIssue(ctx, "o", "r", 1, opt)
    87  		if got != nil {
    88  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
    89  		}
    90  		return resp, err
    91  	})
    92  }
    93  
    94  func TestSubIssuesService_Remove(t *testing.T) {
    95  	t.Parallel()
    96  	client, mux, _ := setup(t)
    97  
    98  	input := &SubIssueRequest{SubIssueID: 42}
    99  
   100  	mux.HandleFunc("/repos/o/r/issues/1/sub_issue", func(w http.ResponseWriter, r *http.Request) {
   101  		v := new(SubIssueRequest)
   102  		assertNilError(t, json.NewDecoder(r.Body).Decode(v))
   103  
   104  		testMethod(t, r, "DELETE")
   105  		if !cmp.Equal(v, input) {
   106  			t.Errorf("Request body = %+v, want %+v", v, input)
   107  		}
   108  
   109  		fmt.Fprint(w, `{"id":42, "number":1}`)
   110  	})
   111  
   112  	ctx := context.Background()
   113  	got, _, err := client.SubIssue.Remove(ctx, "o", "r", 1, *input)
   114  	if err != nil {
   115  		t.Errorf("SubIssues.Remove returned error: %v", err)
   116  	}
   117  
   118  	want := &SubIssue{ID: Int64(42), Number: Ptr(1)}
   119  	if !cmp.Equal(got, want) {
   120  		t.Errorf("SubIssues.Remove = %+v, want %+v", got, want)
   121  	}
   122  
   123  	const methodName = "Remove"
   124  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   125  		got, resp, err := client.SubIssue.Remove(ctx, "o", "r", 1, *input)
   126  		if got != nil {
   127  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   128  		}
   129  		return resp, err
   130  	})
   131  }
   132  
   133  func TestSubIssuesService_Reprioritize(t *testing.T) {
   134  	t.Parallel()
   135  	client, mux, _ := setup(t)
   136  
   137  	input := &SubIssueRequest{SubIssueID: 42, AfterID: Int64(5)}
   138  
   139  	mux.HandleFunc("/repos/o/r/issues/1/sub_issues/priority", func(w http.ResponseWriter, r *http.Request) {
   140  		testMethod(t, r, "PATCH")
   141  
   142  		v := new(SubIssueRequest)
   143  		assertNilError(t, json.NewDecoder(r.Body).Decode(v))
   144  
   145  		testMethod(t, r, "PATCH")
   146  		if !cmp.Equal(v, input) {
   147  			t.Errorf("Request body = %+v, want %+v", v, input)
   148  		}
   149  
   150  		fmt.Fprint(w, `{"id":42, "number":1}`)
   151  	})
   152  
   153  	ctx := context.Background()
   154  	got, _, err := client.SubIssue.Reprioritize(ctx, "o", "r", 1, *input)
   155  	if err != nil {
   156  		t.Errorf("SubIssues.Reprioritize returned error: %v", err)
   157  	}
   158  
   159  	want := &SubIssue{ID: Int64(42), Number: Ptr(1)}
   160  	if !cmp.Equal(got, want) {
   161  		t.Errorf("SubIssues.Reprioritize = %+v, want %+v", got, want)
   162  	}
   163  
   164  	const methodName = "Reprioritize"
   165  
   166  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   167  		got, resp, err := client.SubIssue.Reprioritize(ctx, "o", "r", 1, *input)
   168  		if got != nil {
   169  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   170  		}
   171  		return resp, err
   172  	})
   173  }