github.com/google/go-github/v33@v33.0.0/github/git_trees_test.go (about)

     1  // Copyright 2013 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  	"bytes"
    10  	"context"
    11  	"fmt"
    12  	"io/ioutil"
    13  	"net/http"
    14  	"reflect"
    15  	"testing"
    16  )
    17  
    18  func TestGitService_GetTree(t *testing.T) {
    19  	client, mux, _, teardown := setup()
    20  	defer teardown()
    21  
    22  	mux.HandleFunc("/repos/o/r/git/trees/s", func(w http.ResponseWriter, r *http.Request) {
    23  		testMethod(t, r, "GET")
    24  		fmt.Fprint(w, `{
    25  			  "sha": "s",
    26  			  "tree": [ { "type": "blob" } ],
    27  			  "truncated": true
    28  			}`)
    29  	})
    30  
    31  	tree, _, err := client.Git.GetTree(context.Background(), "o", "r", "s", true)
    32  	if err != nil {
    33  		t.Errorf("Git.GetTree returned error: %v", err)
    34  	}
    35  
    36  	want := Tree{
    37  		SHA: String("s"),
    38  		Entries: []*TreeEntry{
    39  			{
    40  				Type: String("blob"),
    41  			},
    42  		},
    43  		Truncated: Bool(true),
    44  	}
    45  	if !reflect.DeepEqual(*tree, want) {
    46  		t.Errorf("Tree.Get returned %+v, want %+v", *tree, want)
    47  	}
    48  }
    49  
    50  func TestGitService_GetTree_invalidOwner(t *testing.T) {
    51  	client, _, _, teardown := setup()
    52  	defer teardown()
    53  
    54  	_, _, err := client.Git.GetTree(context.Background(), "%", "%", "%", false)
    55  	testURLParseError(t, err)
    56  }
    57  
    58  func TestGitService_CreateTree(t *testing.T) {
    59  	client, mux, _, teardown := setup()
    60  	defer teardown()
    61  
    62  	input := []*TreeEntry{
    63  		{
    64  			Path: String("file.rb"),
    65  			Mode: String("100644"),
    66  			Type: String("blob"),
    67  			SHA:  String("7c258a9869f33c1e1e1f74fbb32f07c86cb5a75b"),
    68  		},
    69  	}
    70  
    71  	mux.HandleFunc("/repos/o/r/git/trees", func(w http.ResponseWriter, r *http.Request) {
    72  		got, err := ioutil.ReadAll(r.Body)
    73  		if err != nil {
    74  			t.Fatalf("unable to read body: %v", err)
    75  		}
    76  
    77  		testMethod(t, r, "POST")
    78  
    79  		want := []byte(`{"base_tree":"b","tree":[{"sha":"7c258a9869f33c1e1e1f74fbb32f07c86cb5a75b","path":"file.rb","mode":"100644","type":"blob"}]}` + "\n")
    80  		if !bytes.Equal(got, want) {
    81  			t.Errorf("Git.CreateTree request body: %s, want %s", got, want)
    82  		}
    83  
    84  		fmt.Fprint(w, `{
    85  		  "sha": "cd8274d15fa3ae2ab983129fb037999f264ba9a7",
    86  		  "tree": [
    87  		    {
    88  		      "path": "file.rb",
    89  		      "mode": "100644",
    90  		      "type": "blob",
    91  		      "size": 132,
    92  		      "sha": "7c258a9869f33c1e1e1f74fbb32f07c86cb5a75b"
    93  		    }
    94  		  ]
    95  		}`)
    96  	})
    97  
    98  	tree, _, err := client.Git.CreateTree(context.Background(), "o", "r", "b", input)
    99  	if err != nil {
   100  		t.Errorf("Git.CreateTree returned error: %v", err)
   101  	}
   102  
   103  	want := Tree{
   104  		String("cd8274d15fa3ae2ab983129fb037999f264ba9a7"),
   105  		[]*TreeEntry{
   106  			{
   107  				Path: String("file.rb"),
   108  				Mode: String("100644"),
   109  				Type: String("blob"),
   110  				Size: Int(132),
   111  				SHA:  String("7c258a9869f33c1e1e1f74fbb32f07c86cb5a75b"),
   112  			},
   113  		},
   114  		nil,
   115  	}
   116  
   117  	if !reflect.DeepEqual(*tree, want) {
   118  		t.Errorf("Git.CreateTree returned %+v, want %+v", *tree, want)
   119  	}
   120  }
   121  
   122  func TestGitService_CreateTree_Content(t *testing.T) {
   123  	client, mux, _, teardown := setup()
   124  	defer teardown()
   125  
   126  	input := []*TreeEntry{
   127  		{
   128  			Path:    String("content.md"),
   129  			Mode:    String("100644"),
   130  			Content: String("file content"),
   131  		},
   132  	}
   133  
   134  	mux.HandleFunc("/repos/o/r/git/trees", func(w http.ResponseWriter, r *http.Request) {
   135  		got, err := ioutil.ReadAll(r.Body)
   136  		if err != nil {
   137  			t.Fatalf("unable to read body: %v", err)
   138  		}
   139  
   140  		testMethod(t, r, "POST")
   141  
   142  		want := []byte(`{"base_tree":"b","tree":[{"path":"content.md","mode":"100644","content":"file content"}]}` + "\n")
   143  		if !bytes.Equal(got, want) {
   144  			t.Errorf("Git.CreateTree request body: %s, want %s", got, want)
   145  		}
   146  
   147  		fmt.Fprint(w, `{
   148  		  "sha": "5c6780ad2c68743383b740fd1dab6f6a33202b11",
   149  		  "url": "https://api.github.com/repos/o/r/git/trees/5c6780ad2c68743383b740fd1dab6f6a33202b11",
   150  		  "tree": [
   151  		    {
   152  			  "mode": "100644",
   153  			  "type": "blob",
   154  			  "sha":  "aad8feacf6f8063150476a7b2bd9770f2794c08b",
   155  			  "path": "content.md",
   156  			  "size": 12,
   157  			  "url": "https://api.github.com/repos/o/r/git/blobs/aad8feacf6f8063150476a7b2bd9770f2794c08b"
   158  		    }
   159  		  ]
   160  		}`)
   161  	})
   162  
   163  	tree, _, err := client.Git.CreateTree(context.Background(), "o", "r", "b", input)
   164  	if err != nil {
   165  		t.Errorf("Git.CreateTree returned error: %v", err)
   166  	}
   167  
   168  	want := Tree{
   169  		String("5c6780ad2c68743383b740fd1dab6f6a33202b11"),
   170  		[]*TreeEntry{
   171  			{
   172  				Path: String("content.md"),
   173  				Mode: String("100644"),
   174  				Type: String("blob"),
   175  				Size: Int(12),
   176  				SHA:  String("aad8feacf6f8063150476a7b2bd9770f2794c08b"),
   177  				URL:  String("https://api.github.com/repos/o/r/git/blobs/aad8feacf6f8063150476a7b2bd9770f2794c08b"),
   178  			},
   179  		},
   180  		nil,
   181  	}
   182  
   183  	if !reflect.DeepEqual(*tree, want) {
   184  		t.Errorf("Git.CreateTree returned %+v, want %+v", *tree, want)
   185  	}
   186  }
   187  
   188  func TestGitService_CreateTree_Delete(t *testing.T) {
   189  	client, mux, _, teardown := setup()
   190  	defer teardown()
   191  
   192  	input := []*TreeEntry{
   193  		{
   194  			Path: String("content.md"),
   195  			Mode: String("100644"),
   196  		},
   197  	}
   198  
   199  	mux.HandleFunc("/repos/o/r/git/trees", func(w http.ResponseWriter, r *http.Request) {
   200  		got, err := ioutil.ReadAll(r.Body)
   201  		if err != nil {
   202  			t.Fatalf("unable to read body: %v", err)
   203  		}
   204  
   205  		testMethod(t, r, "POST")
   206  
   207  		want := []byte(`{"base_tree":"b","tree":[{"sha":null,"path":"content.md","mode":"100644"}]}` + "\n")
   208  		if !bytes.Equal(got, want) {
   209  			t.Errorf("Git.CreateTree request body: %s, want %s", got, want)
   210  		}
   211  
   212  		fmt.Fprint(w, `{
   213  		  "sha": "5c6780ad2c68743383b740fd1dab6f6a33202b11",
   214  		  "url": "https://api.github.com/repos/o/r/git/trees/5c6780ad2c68743383b740fd1dab6f6a33202b11",
   215  		  "tree": [
   216  		    {
   217  			  "mode": "100644",
   218  			  "type": "blob",
   219  			  "sha":  null,
   220  			  "path": "content.md",
   221  			  "size": 12,
   222  			  "url": "https://api.github.com/repos/o/r/git/blobs/aad8feacf6f8063150476a7b2bd9770f2794c08b"
   223  		    }
   224  		  ]
   225  		}`)
   226  	})
   227  
   228  	tree, _, err := client.Git.CreateTree(context.Background(), "o", "r", "b", input)
   229  	if err != nil {
   230  		t.Errorf("Git.CreateTree returned error: %v", err)
   231  	}
   232  
   233  	want := Tree{
   234  		String("5c6780ad2c68743383b740fd1dab6f6a33202b11"),
   235  		[]*TreeEntry{
   236  			{
   237  				Path: String("content.md"),
   238  				Mode: String("100644"),
   239  				Type: String("blob"),
   240  				Size: Int(12),
   241  				SHA:  nil,
   242  				URL:  String("https://api.github.com/repos/o/r/git/blobs/aad8feacf6f8063150476a7b2bd9770f2794c08b"),
   243  			},
   244  		},
   245  		nil,
   246  	}
   247  
   248  	if !reflect.DeepEqual(*tree, want) {
   249  		t.Errorf("Git.CreateTree returned %+v, want %+v", *tree, want)
   250  	}
   251  }
   252  
   253  func TestGitService_CreateTree_invalidOwner(t *testing.T) {
   254  	client, _, _, teardown := setup()
   255  	defer teardown()
   256  
   257  	_, _, err := client.Git.CreateTree(context.Background(), "%", "%", "", nil)
   258  	testURLParseError(t, err)
   259  }