github.com/cs3org/reva/v2@v2.27.7/pkg/ocm/invite/repository/json/json_test.go (about)

     1  // Copyright 2018-2023 CERN
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  //
    15  // In applying this license, CERN does not waive the privileges and immunities
    16  // granted to it by virtue of its status as an Intergovernmental Organization
    17  // or submit itself to any jurisdiction.
    18  
    19  package json
    20  
    21  import (
    22  	"context"
    23  	"os"
    24  	"path/filepath"
    25  	"testing"
    26  	"time"
    27  
    28  	userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
    29  	invitepb "github.com/cs3org/go-cs3apis/cs3/ocm/invite/v1beta1"
    30  	typespb "github.com/cs3org/go-cs3apis/cs3/types/v1beta1"
    31  	"github.com/cs3org/reva/v2/pkg/ocm/invite"
    32  	"github.com/stretchr/testify/assert"
    33  )
    34  
    35  func setupTestManager(t *testing.T) *manager {
    36  	// Create a temporary file for the test
    37  	tmpDir, err := os.MkdirTemp("", "invite-manager-test")
    38  	if err != nil {
    39  		t.Fatalf("error creating temp file: %v", err)
    40  	}
    41  
    42  	// Initialize a new manager with the temp file
    43  	config := map[string]interface{}{
    44  		"file": filepath.Join(tmpDir, "ocm-invites.json"),
    45  	}
    46  	mgr, err := New(config)
    47  	if err != nil {
    48  		t.Fatalf("error initializing invite manager: %v", err)
    49  	}
    50  
    51  	return mgr.(*manager)
    52  }
    53  
    54  func TestAddToken(t *testing.T) {
    55  	mgr := setupTestManager(t)
    56  	ctx := context.Background()
    57  
    58  	// Test data
    59  	token := &invitepb.InviteToken{
    60  		Token: "test-token",
    61  		UserId: &userpb.UserId{
    62  			OpaqueId: "user1",
    63  		},
    64  		Expiration: &typespb.Timestamp{
    65  			Seconds: uint64(time.Now().Add(24 * time.Hour).Unix()),
    66  		},
    67  	}
    68  
    69  	// Add token
    70  	err := mgr.AddToken(ctx, token)
    71  	assert.NoError(t, err)
    72  
    73  	// Check if the token was added correctly
    74  	storedToken, err := mgr.GetToken(ctx, token.Token)
    75  	assert.NoError(t, err)
    76  	assert.Equal(t, token, storedToken)
    77  }
    78  
    79  func TestGetToken_NotFound(t *testing.T) {
    80  	mgr := setupTestManager(t)
    81  	ctx := context.Background()
    82  
    83  	// Try to get a non-existent token
    84  	_, err := mgr.GetToken(ctx, "non-existent-token")
    85  	assert.ErrorIs(t, err, invite.ErrTokenNotFound)
    86  }
    87  
    88  func TestListTokens(t *testing.T) {
    89  	mgr := setupTestManager(t)
    90  	ctx := context.Background()
    91  
    92  	initiator := &userpb.UserId{
    93  		OpaqueId: "user1",
    94  	}
    95  
    96  	// Add some tokens
    97  	token1 := &invitepb.InviteToken{
    98  		Token:  "token1",
    99  		UserId: initiator,
   100  	}
   101  	token2 := &invitepb.InviteToken{
   102  		Token:  "token2",
   103  		UserId: initiator,
   104  	}
   105  
   106  	_ = mgr.AddToken(ctx, token1)
   107  	_ = mgr.AddToken(ctx, token2)
   108  
   109  	// List tokens
   110  	tokens, err := mgr.ListTokens(ctx, initiator)
   111  	assert.NoError(t, err)
   112  	assert.Len(t, tokens, 2)
   113  }
   114  
   115  func TestAddRemoteUser(t *testing.T) {
   116  	mgr := setupTestManager(t)
   117  	ctx := context.Background()
   118  
   119  	initiator := &userpb.UserId{
   120  		OpaqueId: "user1",
   121  	}
   122  
   123  	remoteUser := &userpb.User{
   124  		Id: &userpb.UserId{
   125  			OpaqueId: "remoteUser1",
   126  		},
   127  	}
   128  
   129  	// Add remote user
   130  	err := mgr.AddRemoteUser(ctx, initiator, remoteUser)
   131  	assert.NoError(t, err)
   132  
   133  	// Retrieve remote user and verify
   134  	storedUser, err := mgr.GetRemoteUser(ctx, initiator, remoteUser.Id)
   135  	assert.NoError(t, err)
   136  	assert.Equal(t, remoteUser, storedUser)
   137  }
   138  
   139  func TestGetRemoteUser_NotFound(t *testing.T) {
   140  	mgr := setupTestManager(t)
   141  	ctx := context.Background()
   142  
   143  	initiator := &userpb.UserId{
   144  		OpaqueId: "user1",
   145  	}
   146  
   147  	// Try to get a non-existent remote user
   148  	_, err := mgr.GetRemoteUser(ctx, initiator, &userpb.UserId{OpaqueId: "non-existent"})
   149  	assert.Error(t, err)
   150  }
   151  
   152  func TestDeleteRemoteUser(t *testing.T) {
   153  	mgr := setupTestManager(t)
   154  	ctx := context.Background()
   155  
   156  	initiator := &userpb.UserId{
   157  		OpaqueId: "user1",
   158  	}
   159  
   160  	remoteUser1 := &userpb.User{
   161  		Id: &userpb.UserId{
   162  			OpaqueId: "remoteUser1",
   163  		},
   164  	}
   165  	remoteUser2 := &userpb.User{
   166  		Id: &userpb.UserId{
   167  			OpaqueId: "remoteUser2",
   168  		},
   169  	}
   170  	remoteUser3 := &userpb.User{
   171  		Id: &userpb.UserId{
   172  			OpaqueId: "remoteUser3",
   173  		},
   174  	}
   175  
   176  	// Add remote users
   177  	err := mgr.AddRemoteUser(ctx, initiator, remoteUser1)
   178  	assert.NoError(t, err)
   179  	err = mgr.AddRemoteUser(ctx, initiator, remoteUser2)
   180  	assert.NoError(t, err)
   181  	err = mgr.AddRemoteUser(ctx, initiator, remoteUser3)
   182  	assert.NoError(t, err)
   183  
   184  	// Delete remote user
   185  	err = mgr.DeleteRemoteUser(ctx, initiator, remoteUser2.Id)
   186  	assert.NoError(t, err)
   187  
   188  	// Try to get the deleted user
   189  	_, err = mgr.GetRemoteUser(ctx, initiator, remoteUser1.Id)
   190  	assert.NoError(t, err)
   191  	_, err = mgr.GetRemoteUser(ctx, initiator, remoteUser2.Id)
   192  	assert.Error(t, err)
   193  	_, err = mgr.GetRemoteUser(ctx, initiator, remoteUser3.Id)
   194  	assert.NoError(t, err)
   195  }