github.com/tsuty/git-user@v1.0.0/git_test.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"os"
     7  	"os/exec"
     8  	"testing"
     9  )
    10  
    11  func insideWorkTree() (cleanupFunc func()) {
    12  	dir, _ := ioutil.TempDir(os.TempDir(), "git-user_test")
    13  	if _, found := os.LookupEnv("DEBUG"); found {
    14  		fmt.Println("# insideWorkTree", dir)
    15  	}
    16  	os.Chdir(dir)
    17  	exec.Command("git", "init").Run()
    18  	return func() {
    19  		os.RemoveAll(dir)
    20  	}
    21  }
    22  
    23  func outsideWorkTree() (cleanupFunc func()) {
    24  	dir, _ := ioutil.TempDir(os.TempDir(), "git-user_test")
    25  	if _, found := os.LookupEnv("DEBUG"); found {
    26  		fmt.Println("# outsideWorkTree", dir)
    27  	}
    28  	os.Chdir(dir)
    29  	return func() {
    30  		os.RemoveAll(dir)
    31  	}
    32  }
    33  
    34  func TestGit_GetLocalUserEmail(t *testing.T) {
    35  	tests := []struct {
    36  		name string
    37  		want string
    38  		init func() func()
    39  	}{
    40  		{
    41  			"valid",
    42  			"tsuty@example.com",
    43  			func() func() {
    44  				fn := insideWorkTree()
    45  				exec.Command("git", "config", "--local", "user.email", "tsuty@example.com").Run()
    46  				return fn
    47  			},
    48  		},
    49  		{
    50  			"invalid",
    51  			"",
    52  			func() func() {
    53  				return insideWorkTree()
    54  			},
    55  		},
    56  	}
    57  	for _, tt := range tests {
    58  		t.Run(tt.name, func(t *testing.T) {
    59  			gi := &Git{}
    60  			fn := tt.init()
    61  			defer fn()
    62  			if got := gi.GetLocalUserEmail(); got != tt.want {
    63  				t.Errorf("GetLocalUserEmail() = %v, want %v", got, tt.want)
    64  			}
    65  		})
    66  	}
    67  }
    68  
    69  func TestGit_GetLocalUserName(t *testing.T) {
    70  	tests := []struct {
    71  		name string
    72  		want string
    73  		init func() func()
    74  	}{
    75  		{
    76  			"valid",
    77  			"Mike Wazowski",
    78  			func() func() {
    79  				fn := insideWorkTree()
    80  				exec.Command("git", "config", "--local", "user.name", "Mike Wazowski").Run()
    81  				return fn
    82  			},
    83  		},
    84  		{
    85  			"invalid",
    86  			"",
    87  			func() func() {
    88  				return insideWorkTree()
    89  			},
    90  		},
    91  	}
    92  	for _, tt := range tests {
    93  		t.Run(tt.name, func(t *testing.T) {
    94  			gi := &Git{}
    95  			fn := tt.init()
    96  			defer fn()
    97  			if got := gi.GetLocalUserName(); got != tt.want {
    98  				t.Errorf("GetLocalUserName() = %v, want %v", got, tt.want)
    99  			}
   100  		})
   101  	}
   102  }
   103  
   104  func TestGit_GetLocalUserSigningKey(t *testing.T) {
   105  	tests := []struct {
   106  		name string
   107  		want string
   108  		init func() func()
   109  	}{
   110  		{
   111  			"valid",
   112  			"AAABBBCCCDDD",
   113  			func() func() {
   114  				fn := insideWorkTree()
   115  				exec.Command("git", "config", "--local", "user.signingkey", "AAABBBCCCDDD").Run()
   116  				return fn
   117  			},
   118  		},
   119  		{
   120  			"invalid",
   121  			"",
   122  			func() func() {
   123  				return insideWorkTree()
   124  			},
   125  		},
   126  	}
   127  	for _, tt := range tests {
   128  		t.Run(tt.name, func(t *testing.T) {
   129  			gi := &Git{}
   130  			fn := tt.init()
   131  			defer fn()
   132  			if got := gi.GetLocalUserSigningKey(); got != tt.want {
   133  				t.Errorf("GetLocalUserSigningKey() = %v, want %v", got, tt.want)
   134  			}
   135  		})
   136  	}
   137  }
   138  
   139  func TestGit_GetRemoteOriginURL(t *testing.T) {
   140  	tests := []struct {
   141  		name string
   142  		want string
   143  		init func() func()
   144  	}{
   145  		{
   146  			"valid",
   147  			"git@example.com:foo/bar",
   148  			func() func() {
   149  				fn := insideWorkTree()
   150  				exec.Command("git", "remote", "add", "origin", "git@example.com:foo/bar").Run()
   151  				return fn
   152  			},
   153  		},
   154  		{
   155  			"invalid",
   156  			"",
   157  			func() func() {
   158  				return insideWorkTree()
   159  			},
   160  		},
   161  	}
   162  	for _, tt := range tests {
   163  		t.Run(tt.name, func(t *testing.T) {
   164  			gi := &Git{}
   165  			fn := tt.init()
   166  			defer fn()
   167  			if got := gi.GetRemoteOriginURL(); got != tt.want {
   168  				t.Errorf("GetRemoteOriginURL() got = %v, want %v", got, tt.want)
   169  			}
   170  		})
   171  	}
   172  }
   173  
   174  func TestGit_IsInsideWorkTree(t *testing.T) {
   175  	tests := []struct {
   176  		name string
   177  		want bool
   178  		init func() func()
   179  	}{
   180  		{
   181  			"valid",
   182  			true,
   183  			func() func() {
   184  				return insideWorkTree()
   185  			},
   186  		},
   187  		{
   188  			"invalid",
   189  			false,
   190  			func() func() {
   191  				return outsideWorkTree()
   192  			},
   193  		},
   194  	}
   195  	for _, tt := range tests {
   196  		t.Run(tt.name, func(t *testing.T) {
   197  			gi := &Git{}
   198  			fn := tt.init()
   199  			defer fn()
   200  			if got := gi.IsInsideWorkTree(); got != tt.want {
   201  				t.Errorf("IsInsideWorkTree() got = %v, want %v", got, tt.want)
   202  			}
   203  		})
   204  	}
   205  }
   206  
   207  func TestGit_SetLocalUserEmail(t *testing.T) {
   208  	type args struct {
   209  		email string
   210  	}
   211  	tests := []struct {
   212  		name    string
   213  		args    args
   214  		wantErr bool
   215  		want    string
   216  		init    func() func()
   217  	}{
   218  		{
   219  			"valid",
   220  			args{email: "tsuty@example.com"},
   221  			false,
   222  			"tsuty@example.com",
   223  			func() func() {
   224  				return insideWorkTree()
   225  			},
   226  		},
   227  		{
   228  			"invalid",
   229  			args{email: "tsuty@example.com"},
   230  			true,
   231  			"",
   232  			func() func() {
   233  				return outsideWorkTree()
   234  			},
   235  		},
   236  	}
   237  	for _, tt := range tests {
   238  		t.Run(tt.name, func(t *testing.T) {
   239  			gi := &Git{}
   240  			fn := tt.init()
   241  			defer fn()
   242  			err := gi.SetLocalUserEmail(tt.args.email)
   243  			if (err != nil) != tt.wantErr {
   244  				t.Errorf("SetLocalUserEmail() error = %v, wantErr %v", err, tt.wantErr)
   245  			} else {
   246  				if got := gi.GetLocalUserEmail(); got != tt.want {
   247  					t.Errorf("GetLocalUserEmail() = %v, want %v", got, tt.want)
   248  				}
   249  			}
   250  		})
   251  	}
   252  }
   253  
   254  func TestGit_SetLocalUserName(t *testing.T) {
   255  	type args struct {
   256  		name string
   257  	}
   258  	tests := []struct {
   259  		name    string
   260  		args    args
   261  		wantErr bool
   262  		want    string
   263  		init    func() func()
   264  	}{
   265  		{
   266  			"valid",
   267  			args{name: "Mike Wazowski"},
   268  			false,
   269  			"Mike Wazowski",
   270  			func() func() {
   271  				return insideWorkTree()
   272  			},
   273  		},
   274  		{
   275  			"invalid",
   276  			args{name: "Mike Wazowski"},
   277  			true,
   278  			"",
   279  			func() func() {
   280  				return outsideWorkTree()
   281  			},
   282  		},
   283  	}
   284  	for _, tt := range tests {
   285  		t.Run(tt.name, func(t *testing.T) {
   286  			gi := &Git{}
   287  			fn := tt.init()
   288  			defer fn()
   289  			err := gi.SetLocalUserName(tt.args.name)
   290  			if (err != nil) != tt.wantErr {
   291  				t.Errorf("SetLocalUserName() error = %v, wantErr %v", err, tt.wantErr)
   292  			} else {
   293  				if got := gi.GetLocalUserName(); got != tt.want {
   294  					t.Errorf("GetLocalUserName() = %v, want %v", got, tt.want)
   295  				}
   296  			}
   297  		})
   298  	}
   299  }
   300  
   301  func TestGit_SetLocalUserSigningKey(t *testing.T) {
   302  	type args struct {
   303  		signingkey string
   304  	}
   305  	tests := []struct {
   306  		name    string
   307  		args    args
   308  		wantErr bool
   309  		want    string
   310  		init    func() func()
   311  	}{
   312  		{
   313  			"valid",
   314  			args{signingkey: "aaabbbcccddeeefff"},
   315  			false,
   316  			"aaabbbcccddeeefff",
   317  			func() func() {
   318  				return insideWorkTree()
   319  			},
   320  		},
   321  		{
   322  			"invalid",
   323  			args{signingkey: "aaabbbcccddeeefff"},
   324  			true,
   325  			"",
   326  			func() func() {
   327  				return outsideWorkTree()
   328  			},
   329  		},
   330  	}
   331  	for _, tt := range tests {
   332  		t.Run(tt.name, func(t *testing.T) {
   333  			gi := &Git{}
   334  			fn := tt.init()
   335  			defer fn()
   336  
   337  			err := gi.SetLocalUserSigningKey(tt.args.signingkey)
   338  			if (err != nil) != tt.wantErr {
   339  				t.Errorf("SetLocalUserSigningKey() error = %v, wantErr %v", err, tt.wantErr)
   340  			} else {
   341  				if got := gi.GetLocalUserSigningKey(); got != tt.want {
   342  					t.Errorf("GetLocalUserSigningKey() = %v, want %v", got, tt.want)
   343  				}
   344  			}
   345  		})
   346  	}
   347  }
   348  
   349  func TestGit_UnsetLocalUserEmail(t *testing.T) {
   350  	tests := []struct {
   351  		name    string
   352  		wantErr bool
   353  		want    string
   354  		init    func() func()
   355  	}{
   356  		{
   357  			"valid",
   358  			false,
   359  			"",
   360  			func() func() {
   361  				fn := insideWorkTree()
   362  				exec.Command("git", "config", "--local", "user.email", "tsuty@example.com").Run()
   363  				return fn
   364  			},
   365  		},
   366  		{
   367  			"invalid",
   368  			true,
   369  			"",
   370  			func() func() {
   371  				return insideWorkTree()
   372  			},
   373  		},
   374  	}
   375  	for _, tt := range tests {
   376  		t.Run(tt.name, func(t *testing.T) {
   377  			gi := &Git{}
   378  			fn := tt.init()
   379  			defer fn()
   380  			if err := gi.UnsetLocalUserEmail(); (err != nil) != tt.wantErr {
   381  				t.Errorf("UnsetLocalUserEmail() error = %v, wantErr %v", err, tt.wantErr)
   382  			}
   383  			if got := gi.GetLocalUserEmail(); got != tt.want {
   384  				t.Errorf("GetLocalUserEmail() got = %v, want %v", got, tt.want)
   385  			}
   386  		})
   387  	}
   388  }
   389  
   390  func TestGit_UnsetLocalUserName(t *testing.T) {
   391  	tests := []struct {
   392  		name    string
   393  		wantErr bool
   394  		want    string
   395  		init    func() func()
   396  	}{
   397  		{
   398  			"valid",
   399  			false,
   400  			"",
   401  			func() func() {
   402  				fn := insideWorkTree()
   403  				exec.Command("git", "config", "--local", "user.name", "Mike Wazowski").Run()
   404  				return fn
   405  			},
   406  		},
   407  		{
   408  			"invalid",
   409  			true,
   410  			"",
   411  			func() func() {
   412  				return insideWorkTree()
   413  			},
   414  		},
   415  	}
   416  	for _, tt := range tests {
   417  		t.Run(tt.name, func(t *testing.T) {
   418  			gi := &Git{}
   419  			fn := tt.init()
   420  			defer fn()
   421  			if err := gi.UnsetLocalUserName(); (err != nil) != tt.wantErr {
   422  				t.Errorf("UnsetLocalUserName() error = %v, wantErr %v", err, tt.wantErr)
   423  			}
   424  			if got := gi.GetLocalUserName(); got != tt.want {
   425  				t.Errorf("UnsetLocalUserEmail() got = %v, want %v", got, tt.want)
   426  			}
   427  		})
   428  	}
   429  }
   430  
   431  func TestGit_UnsetLocalUserSigningKey(t *testing.T) {
   432  	tests := []struct {
   433  		name    string
   434  		wantErr bool
   435  		want    string
   436  		init    func() func()
   437  	}{
   438  		{
   439  			"valid",
   440  			false,
   441  			"",
   442  			func() func() {
   443  				fn := insideWorkTree()
   444  				exec.Command("git", "config", "--local", "user.signingkey", "aaabbbcccddeeefff").Run()
   445  				return fn
   446  			},
   447  		},
   448  		{
   449  			"invalid",
   450  			true,
   451  			"",
   452  			func() func() {
   453  				return insideWorkTree()
   454  			},
   455  		},
   456  	}
   457  	for _, tt := range tests {
   458  		t.Run(tt.name, func(t *testing.T) {
   459  			gi := &Git{}
   460  			fn := tt.init()
   461  			defer fn()
   462  			if err := gi.UnsetLocalUserSigningKey(); (err != nil) != tt.wantErr {
   463  				t.Errorf("UnsetLocalUserSigningKey() error = %v, wantErr %v", err, tt.wantErr)
   464  			}
   465  			if got := gi.GetLocalUserSigningKey(); got != tt.want {
   466  				t.Errorf("GetLocalUserSigningKey() got = %v, want %v", got, tt.want)
   467  			}
   468  		})
   469  	}
   470  }