github.com/hyperledger/aries-framework-go@v0.3.2/pkg/client/ld/client_test.go (about)

     1  /*
     2  Copyright SecureKey Technologies Inc. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package ld_test
     8  
     9  import (
    10  	"bytes"
    11  	"io/ioutil"
    12  	"net/http"
    13  	"testing"
    14  
    15  	"github.com/stretchr/testify/require"
    16  
    17  	"github.com/hyperledger/aries-framework-go/pkg/client/ld"
    18  	"github.com/hyperledger/aries-framework-go/pkg/doc/ldcontext/remote"
    19  	"github.com/hyperledger/aries-framework-go/pkg/internal/ldtestutil"
    20  	mockld "github.com/hyperledger/aries-framework-go/pkg/mock/ld"
    21  	mockprovider "github.com/hyperledger/aries-framework-go/pkg/mock/provider"
    22  )
    23  
    24  const sampleContextsResponse = `{
    25    "documents": [
    26      {
    27        "url": "https://example.com/context.jsonld",
    28        "content": {
    29          "@context": "remote"
    30        }
    31      }
    32    ]
    33  }`
    34  
    35  func TestClient_AddContexts(t *testing.T) {
    36  	c := createLDClient(t)
    37  
    38  	err := c.AddContexts(ldtestutil.Contexts())
    39  	require.NoError(t, err)
    40  }
    41  
    42  func TestClient_AddRemoteProvider(t *testing.T) {
    43  	httpClient := &mockHTTPClient{
    44  		DoFunc: func(req *http.Request) (*http.Response, error) {
    45  			return &http.Response{
    46  				StatusCode: http.StatusOK,
    47  				Body:       ioutil.NopCloser(bytes.NewReader([]byte(sampleContextsResponse))),
    48  			}, nil
    49  		},
    50  	}
    51  	c := createLDClient(t)
    52  
    53  	_, err := c.AddRemoteProvider("endpoint", remote.WithHTTPClient(httpClient))
    54  	require.NoError(t, err)
    55  }
    56  
    57  func TestClient_RefreshRemoteProvider(t *testing.T) {
    58  	httpClient := &mockHTTPClient{
    59  		DoFunc: func(req *http.Request) (*http.Response, error) {
    60  			return &http.Response{
    61  				StatusCode: http.StatusOK,
    62  				Body:       ioutil.NopCloser(bytes.NewReader([]byte(sampleContextsResponse))),
    63  			}, nil
    64  		},
    65  	}
    66  	c := createLDClient(t)
    67  
    68  	err := c.RefreshRemoteProvider("id", remote.WithHTTPClient(httpClient))
    69  	require.NoError(t, err)
    70  }
    71  
    72  func TestClient_DeleteRemoteProvider(t *testing.T) {
    73  	httpClient := &mockHTTPClient{
    74  		DoFunc: func(req *http.Request) (*http.Response, error) {
    75  			return &http.Response{
    76  				StatusCode: http.StatusOK,
    77  				Body:       ioutil.NopCloser(bytes.NewReader([]byte(sampleContextsResponse))),
    78  			}, nil
    79  		},
    80  	}
    81  	c := createLDClient(t)
    82  
    83  	err := c.DeleteRemoteProvider("id", remote.WithHTTPClient(httpClient))
    84  	require.NoError(t, err)
    85  }
    86  
    87  func TestClient_GetAllRemoteProviders(t *testing.T) {
    88  	c := createLDClient(t)
    89  
    90  	_, err := c.GetAllRemoteProviders()
    91  	require.NoError(t, err)
    92  }
    93  
    94  func TestClient_RefreshAllRemoteProviders(t *testing.T) {
    95  	httpClient := createHTTPClient()
    96  	c := createLDClient(t)
    97  
    98  	err := c.RefreshAllRemoteProviders(remote.WithHTTPClient(httpClient))
    99  	require.NoError(t, err)
   100  }
   101  
   102  func createLDClient(t *testing.T) *ld.Client {
   103  	t.Helper()
   104  
   105  	c := ld.NewClient(createMockProvider(), ld.WithLDService(&mockld.MockService{}))
   106  	require.NotNil(t, c)
   107  
   108  	return c
   109  }
   110  
   111  func createMockProvider() *mockprovider.Provider {
   112  	return &mockprovider.Provider{
   113  		ContextStoreValue:        mockld.NewMockContextStore(),
   114  		RemoteProviderStoreValue: mockld.NewMockRemoteProviderStore(),
   115  	}
   116  }
   117  
   118  func createHTTPClient() *mockHTTPClient {
   119  	return &mockHTTPClient{
   120  		DoFunc: func(req *http.Request) (*http.Response, error) {
   121  			return &http.Response{
   122  				StatusCode: http.StatusOK,
   123  				Body:       ioutil.NopCloser(bytes.NewReader([]byte(sampleContextsResponse))),
   124  			}, nil
   125  		},
   126  	}
   127  }
   128  
   129  type mockHTTPClient struct {
   130  	DoFunc func(req *http.Request) (*http.Response, error)
   131  }
   132  
   133  func (m *mockHTTPClient) Do(req *http.Request) (*http.Response, error) {
   134  	return m.DoFunc(req)
   135  }