|
17 | 17 | package thirdparty |
18 | 18 |
|
19 | 19 | import ( |
| 20 | + "encoding/json" |
20 | 21 | "errors" |
| 22 | + "github.com/supertokens/supertokens-golang/recipe/session" |
21 | 23 | "io" |
22 | 24 | "io/ioutil" |
| 25 | + "net" |
23 | 26 | "net/http" |
24 | 27 | "net/http/httptest" |
25 | 28 | "net/url" |
@@ -779,3 +782,122 @@ func TestThatSignInUpFailsIfValidateAccessTokenReturnsError(t *testing.T) { |
779 | 782 | respString = strings.Replace(respString, "\n", "", -1) |
780 | 783 | assert.Equal(t, respString, "Invalid access token") |
781 | 784 | } |
| 785 | + |
| 786 | +func TestThatSignInUpWorksIfValidateAccessTokenDoesNotReturnError(t *testing.T) { |
| 787 | + overrideValidateCalled := false |
| 788 | + configValue := supertokens.TypeInput{ |
| 789 | + Supertokens: &supertokens.ConnectionInfo{ |
| 790 | + ConnectionURI: "http://localhost:8080", |
| 791 | + }, |
| 792 | + AppInfo: supertokens.AppInfo{ |
| 793 | + APIDomain: "api.supertokens.io", |
| 794 | + AppName: "SuperTokens", |
| 795 | + WebsiteDomain: "supertokens.io", |
| 796 | + }, |
| 797 | + RecipeList: []supertokens.Recipe{ |
| 798 | + session.Init(nil), |
| 799 | + Init( |
| 800 | + &tpmodels.TypeInput{ |
| 801 | + SignInAndUpFeature: tpmodels.TypeInputSignInAndUp{ |
| 802 | + Providers: []tpmodels.ProviderInput{ |
| 803 | + { |
| 804 | + Config: tpmodels.ProviderConfig{ |
| 805 | + ThirdPartyId: "custom", |
| 806 | + TokenEndpoint: "http://127.0.0.1:8083/tokenendpoint", |
| 807 | + UserInfoEndpoint: "http://127.0.0.1:8083/userinfo", |
| 808 | + UserInfoMap: tpmodels.TypeUserInfoMap{ |
| 809 | + FromUserInfoAPI: tpmodels.TypeUserInfoMapFields{ |
| 810 | + UserId: "userId", |
| 811 | + Email: "email", |
| 812 | + EmailVerified: "emailVerified", |
| 813 | + }, |
| 814 | + }, |
| 815 | + Clients: []tpmodels.ProviderClientConfig{ |
| 816 | + { |
| 817 | + ClientID: "test", |
| 818 | + ClientSecret: "test-secret", |
| 819 | + Scope: []string{"test-scope-1", "test-scope-2"}, |
| 820 | + }, |
| 821 | + }, |
| 822 | + ValidateAccessToken: func(accessToken string, clientConfig tpmodels.ProviderConfigForClientType, userContext supertokens.UserContext) error { |
| 823 | + overrideValidateCalled = true |
| 824 | + if accessToken != "accesstoken" { |
| 825 | + return errors.New("Invalid access token") |
| 826 | + } |
| 827 | + |
| 828 | + return nil |
| 829 | + }, |
| 830 | + }, |
| 831 | + }, |
| 832 | + }, |
| 833 | + }, |
| 834 | + }, |
| 835 | + ), |
| 836 | + }, |
| 837 | + } |
| 838 | + |
| 839 | + BeforeEach() |
| 840 | + unittesting.StartUpST("localhost", "8080") |
| 841 | + defer AfterEach() |
| 842 | + err := supertokens.Init(configValue) |
| 843 | + |
| 844 | + if err != nil { |
| 845 | + t.Error(err.Error()) |
| 846 | + } |
| 847 | + |
| 848 | + mux := http.NewServeMux() |
| 849 | + |
| 850 | + mux.HandleFunc("/tokenendpoint", func(rw http.ResponseWriter, r *http.Request) { |
| 851 | + data := map[string]interface{}{ |
| 852 | + "access_token": "accesstoken", |
| 853 | + "id_token": "idtoken", |
| 854 | + } |
| 855 | + rw.Header().Set("Content-Type", "application/json") |
| 856 | + rw.WriteHeader(http.StatusCreated) |
| 857 | + json.NewEncoder(rw).Encode(data) |
| 858 | + }) |
| 859 | + |
| 860 | + mux.HandleFunc("/userinfo", func(rw http.ResponseWriter, r *http.Request) { |
| 861 | + data := map[string]interface{}{ |
| 862 | + "userId": "testiserid", |
| 863 | + "email": "testinguser@supertokens.com", |
| 864 | + "emailVerified": "true", |
| 865 | + } |
| 866 | + rw.Header().Set("Content-Type", "application/json") |
| 867 | + rw.WriteHeader(http.StatusCreated) |
| 868 | + json.NewEncoder(rw).Encode(data) |
| 869 | + }) |
| 870 | + |
| 871 | + l, err := net.Listen("tcp", "127.0.0.1:8083") |
| 872 | + if err != nil { |
| 873 | + t.Error(err.Error()) |
| 874 | + } |
| 875 | + |
| 876 | + testServer := httptest.NewUnstartedServer(supertokens.Middleware(mux)) |
| 877 | + testServer.Listener.Close() |
| 878 | + testServer.Listener = l |
| 879 | + |
| 880 | + // Start the server. |
| 881 | + testServer.Start() |
| 882 | + defer testServer.Close() |
| 883 | + |
| 884 | + req, err := http.NewRequest(http.MethodPost, testServer.URL+"/auth/signinup", strings.NewReader(`{"thirdPartyId": "custom", "redirectURIInfo": {"redirectURIOnProviderDashboard": "http://127.0.0.1/callback", "redirectURIQueryParams": {"code": "abcdefghj"}}}`)) |
| 885 | + if err != nil { |
| 886 | + t.Error(err.Error()) |
| 887 | + } |
| 888 | + |
| 889 | + res, err := http.DefaultClient.Do(req) |
| 890 | + |
| 891 | + dataInBytes, err := ioutil.ReadAll(res.Body) |
| 892 | + if err != nil { |
| 893 | + t.Error(err.Error()) |
| 894 | + } |
| 895 | + |
| 896 | + var response map[string]string |
| 897 | + |
| 898 | + err = json.Unmarshal(dataInBytes, &response) |
| 899 | + |
| 900 | + assert.Equal(t, res.StatusCode, 200) |
| 901 | + assert.True(t, overrideValidateCalled) |
| 902 | + assert.Equal(t, response["status"], "OK") |
| 903 | +} |
0 commit comments