managed_minimal_test.go raw

   1  package acl
   2  
   3  import (
   4  	"context"
   5  	"testing"
   6  	"time"
   7  
   8  	"next.orly.dev/app/config"
   9  	"next.orly.dev/pkg/database"
  10  	"next.orly.dev/pkg/nostr/encoders/event"
  11  )
  12  
  13  func TestManagedACL_BasicFunctionality(t *testing.T) {
  14  	// Setup test database
  15  	ctx, cancel := context.WithCancel(context.Background())
  16  	defer cancel()
  17  
  18  	// Use a temporary directory for the test database
  19  	tmpDir := t.TempDir()
  20  	db, err := database.New(ctx, cancel, tmpDir, "test.db")
  21  	if err != nil {
  22  		t.Fatalf("Failed to create test database: %v", err)
  23  	}
  24  	defer db.Close()
  25  
  26  	// Setup managed ACL
  27  	cfg := &config.C{
  28  		AuthRequired: false,
  29  		Owners:       []string{"owner1"},
  30  		Admins:       []string{"admin1"},
  31  	}
  32  
  33  	managed := &Managed{
  34  		Ctx:        ctx,
  35  		cfg:        cfg,
  36  		db:         db,
  37  		managedACL: database.NewManagedACL(db),
  38  		owners:     [][]byte{[]byte("owner1")},
  39  		admins:     [][]byte{[]byte("admin1")},
  40  	}
  41  
  42  	// Test basic functionality
  43  	t.Run("owner should get owner access", func(t *testing.T) {
  44  		level := managed.GetAccessLevel([]byte("owner1"), "127.0.0.1")
  45  		if level != "owner" {
  46  			t.Errorf("GetAccessLevel() = %v, want owner", level)
  47  		}
  48  	})
  49  
  50  	t.Run("admin should get admin access", func(t *testing.T) {
  51  		level := managed.GetAccessLevel([]byte("admin1"), "127.0.0.1")
  52  		if level != "admin" {
  53  			t.Errorf("GetAccessLevel() = %v, want admin", level)
  54  		}
  55  	})
  56  
  57  	t.Run("default user should get read access", func(t *testing.T) {
  58  		level := managed.GetAccessLevel([]byte("user1"), "127.0.0.1")
  59  		if level != "read" {
  60  			t.Errorf("GetAccessLevel() = %v, want read", level)
  61  		}
  62  	})
  63  
  64  	t.Run("owner event should be allowed", func(t *testing.T) {
  65  		ev := createMinimalTestEvent("owner1", 1)
  66  		allowed, err := managed.CheckPolicy(ev)
  67  		if err != nil {
  68  			t.Fatalf("CheckPolicy() error = %v", err)
  69  		}
  70  		if !allowed {
  71  			t.Errorf("CheckPolicy() = %v, want true", allowed)
  72  		}
  73  	})
  74  
  75  	t.Run("admin event should be allowed", func(t *testing.T) {
  76  		ev := createMinimalTestEvent("admin1", 1)
  77  		allowed, err := managed.CheckPolicy(ev)
  78  		if err != nil {
  79  			t.Fatalf("CheckPolicy() error = %v", err)
  80  		}
  81  		if !allowed {
  82  			t.Errorf("CheckPolicy() = %v, want true", allowed)
  83  		}
  84  	})
  85  
  86  	t.Run("default event should be allowed", func(t *testing.T) {
  87  		ev := createMinimalTestEvent("user1", 1)
  88  		allowed, err := managed.CheckPolicy(ev)
  89  		if err != nil {
  90  			t.Fatalf("CheckPolicy() error = %v", err)
  91  		}
  92  		if !allowed {
  93  			t.Errorf("CheckPolicy() = %v, want true", allowed)
  94  		}
  95  	})
  96  }
  97  
  98  func createMinimalTestEvent(pubkey string, kind uint16) *event.E {
  99  	ev := event.New()
 100  	ev.Pubkey = []byte(pubkey)
 101  	ev.Kind = kind
 102  	ev.CreatedAt = time.Now().Unix()
 103  	ev.Content = []byte("test content")
 104  	ev.Tags = nil
 105  	ev.ID = ev.GetIDBytes()
 106  	return ev
 107  }
 108