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 }