github.com/covergates/covergates@v0.2.2-0.20201009050117-42ef8a19fb95/models/oauth_test.go (about)

     1  package models
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/covergates/covergates/core"
     8  	"github.com/drone/go-scm/scm"
     9  	"github.com/google/go-cmp/cmp"
    10  )
    11  
    12  func cmpTokens(token1, token2 *core.OAuthToken) string {
    13  	now := time.Now()
    14  	token1.ID = 0
    15  	token1.CreatedAt = now
    16  	token2.ID = 0
    17  	token2.CreatedAt = now
    18  	return cmp.Diff(token1, token2)
    19  }
    20  
    21  func cmpTokenSlice(tokens1, tokens2 []*core.OAuthToken) string {
    22  	now := time.Now()
    23  	for _, token := range tokens1 {
    24  		token.ID = 0
    25  		token.CreatedAt = now
    26  	}
    27  	for _, token := range tokens2 {
    28  		token.ID = 0
    29  		token.CreatedAt = now
    30  	}
    31  	return cmp.Diff(tokens1, tokens2)
    32  }
    33  
    34  func TestOAuth(t *testing.T) {
    35  	ctrl, db := getDatabaseService(t)
    36  	defer ctrl.Finish()
    37  
    38  	store := &OAuthStore{DB: db}
    39  	userStore := &UserStore{DB: db}
    40  
    41  	userStore.Create(core.Gitea, &scm.User{
    42  		Login: "oauth_user",
    43  	}, &core.Token{})
    44  
    45  	userStore.Create(core.Gitea, &scm.User{
    46  		Login: "oauth_user2",
    47  	}, &core.Token{})
    48  
    49  	user, err := userStore.FindByLogin("oauth_user")
    50  	user2, err := userStore.FindByLogin("oauth_user2")
    51  
    52  	if err != nil {
    53  		t.Fatal(err)
    54  	}
    55  
    56  	tokens := []*core.OAuthToken{
    57  		{
    58  			Code:  "code",
    59  			Owner: user,
    60  		},
    61  		{
    62  			Access:  "access",
    63  			Refresh: "refresh",
    64  			Owner:   user,
    65  		},
    66  	}
    67  
    68  	for _, token := range tokens {
    69  		if err := store.Create(token); err != nil {
    70  			t.Fatal(err)
    71  		}
    72  	}
    73  
    74  	// test create
    75  	token, err := store.Find(&core.OAuthToken{Code: "code"})
    76  	if err != nil {
    77  		t.Fatal(err)
    78  	}
    79  
    80  	if diff := cmpTokens(tokens[0], token); diff != "" {
    81  		t.Fatal(diff)
    82  	}
    83  
    84  	token, err = store.Find(&core.OAuthToken{Access: "access"})
    85  	if err != nil {
    86  		t.Fatal(err)
    87  	}
    88  
    89  	if diff := cmpTokens(tokens[1], token); diff != "" {
    90  		t.Fatal(diff)
    91  	}
    92  
    93  	// test list
    94  
    95  	store.Create(&core.OAuthToken{
    96  		Code:  "code2",
    97  		Owner: user2,
    98  	})
    99  
   100  	foundTokens, err := store.List(user)
   101  	if err != nil {
   102  		t.Fatal(err)
   103  	}
   104  
   105  	if diff := cmpTokenSlice(foundTokens, tokens); diff != "" {
   106  		t.Fatal(diff)
   107  	}
   108  
   109  	foundTokens, err = store.List(user2)
   110  	if err != nil {
   111  		t.Fatal(err)
   112  	}
   113  
   114  	if len(foundTokens) != 1 {
   115  		t.Fatal()
   116  	}
   117  
   118  	// test delete
   119  	if err := store.Delete(&core.OAuthToken{Code: "code"}); err != nil {
   120  		t.Fatal(err)
   121  	}
   122  	token, err = store.Find(&core.OAuthToken{Code: "code"})
   123  	if err == nil {
   124  		t.Fatal("fail to delete token")
   125  	}
   126  
   127  	token, err = store.Find(&core.OAuthToken{Access: "access"})
   128  	if err != nil {
   129  		t.Fatal(err)
   130  	}
   131  	if diff := cmpTokens(tokens[1], token); diff != "" {
   132  		t.Log("delete to many tokens")
   133  		t.Fatal(diff)
   134  	}
   135  
   136  }