...

Source file src/edge-infra.dev/pkg/edge/api/services/banner_config_service_test.go

Documentation: edge-infra.dev/pkg/edge/api/services

     1  package services
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/DATA-DOG/go-sqlmock"
     8  	"github.com/stretchr/testify/assert"
     9  
    10  	"edge-infra.dev/pkg/edge/api/graph/model"
    11  )
    12  
    13  // TestGetBannerConfig tests whether get returns a banner config with the expected values
    14  func TestGetBannerConfig(t *testing.T) {
    15  	db, mock, err := sqlmock.New()
    16  	assert.NoError(t, err)
    17  	defer db.Close()
    18  
    19  	service := NewBannerConfigService(db)
    20  
    21  	rows := sqlmock.NewRows([]string{"config_key", "config_value"}).
    22  		AddRow(VNCReadWriteAuthRequired, "true").
    23  		AddRow(VNCReadWriteAuthRequiredOverride, "false").
    24  		AddRow(VNCReadAuthRequired, "true").
    25  		AddRow(VNCReadAuthRequiredOverride, "false")
    26  
    27  	mock.ExpectQuery("SELECT config_key, config_value FROM banner_configs WHERE banner_edge_id = \\$1").
    28  		WithArgs("test-banner-edge-id").
    29  		WillReturnRows(rows)
    30  
    31  	cfg, err := service.GetBannerConfig(context.Background(), "test-banner-edge-id")
    32  	assert.NoError(t, err)
    33  	assert.NotNil(t, cfg)
    34  	assert.Equal(t, true, cfg.VncReadWriteAuthRequired)
    35  	assert.Equal(t, false, cfg.VncReadWriteAuthRequiredOverride)
    36  	assert.Equal(t, true, cfg.VncReadAuthRequired)
    37  	assert.Equal(t, false, cfg.VncReadAuthRequiredOverride)
    38  	assert.NoError(t, mock.ExpectationsWereMet())
    39  }
    40  
    41  // TestGetBannerConfigDefault tests whether get returns a banner config with the default values (false for all)
    42  func TestGetBannerConfigDefault(t *testing.T) {
    43  	db, mock, err := sqlmock.New()
    44  	assert.NoError(t, err)
    45  	defer db.Close()
    46  
    47  	service := NewBannerConfigService(db)
    48  
    49  	// No existing rows
    50  	mock.ExpectQuery("SELECT config_key, config_value FROM banner_configs WHERE banner_edge_id = \\$1").
    51  		WithArgs("test-banner-edge-id").
    52  		WillReturnRows(sqlmock.NewRows([]string{"config_key", "config_value"}))
    53  
    54  	cfg, err := service.GetBannerConfig(context.Background(), "test-banner-edge-id")
    55  	assert.NoError(t, err)
    56  	assert.NotNil(t, cfg)
    57  	assert.Equal(t, false, cfg.VncReadWriteAuthRequired)
    58  	assert.Equal(t, false, cfg.VncReadWriteAuthRequiredOverride)
    59  	assert.Equal(t, false, cfg.VncReadAuthRequired)
    60  	assert.Equal(t, false, cfg.VncReadAuthRequiredOverride)
    61  	assert.NoError(t, mock.ExpectationsWereMet())
    62  }
    63  
    64  // TestUpdateBannerConfig tests whether an existing entry is correctly updated
    65  func TestUpdateBannerConfig(t *testing.T) {
    66  	db, mock, err := sqlmock.New()
    67  	assert.NoError(t, err)
    68  	defer db.Close()
    69  
    70  	service := NewBannerConfigService(db)
    71  
    72  	rows := sqlmock.NewRows([]string{"config_key", "config_value"}).
    73  		AddRow(VNCReadWriteAuthRequired, "true").
    74  		AddRow(VNCReadWriteAuthRequiredOverride, "false").
    75  		AddRow(VNCReadAuthRequired, "true").
    76  		AddRow(VNCReadAuthRequiredOverride, "false")
    77  
    78  	mock.ExpectQuery("SELECT config_key, config_value FROM banner_configs WHERE banner_edge_id = \\$1").
    79  		WithArgs("test-banner-edge-id").
    80  		WillReturnRows(rows)
    81  
    82  	mock.ExpectBegin()
    83  	// dont match the insert order here onwards as we are inserting from a map, which is unordered
    84  	mock.MatchExpectationsInOrder(false)
    85  	mock.ExpectExec("INSERT INTO banner_configs").
    86  		WithArgs("test-banner-edge-id", VNCReadWriteAuthRequired, "false").
    87  		WillReturnResult(sqlmock.NewResult(1, 1))
    88  	mock.ExpectExec("INSERT INTO banner_configs").
    89  		WithArgs("test-banner-edge-id", VNCReadWriteAuthRequiredOverride, "true").
    90  		WillReturnResult(sqlmock.NewResult(1, 1))
    91  	mock.ExpectExec("INSERT INTO banner_configs").
    92  		WithArgs("test-banner-edge-id", VNCReadAuthRequired, "false").
    93  		WillReturnResult(sqlmock.NewResult(1, 1))
    94  	mock.ExpectExec("INSERT INTO banner_configs").
    95  		WithArgs("test-banner-edge-id", VNCReadAuthRequiredOverride, "true").
    96  		WillReturnResult(sqlmock.NewResult(1, 1))
    97  	mock.ExpectCommit()
    98  
    99  	updateCfg := &model.UpdateBannerConfig{
   100  		VncReadWriteAuthRequired:         boolPtr(false),
   101  		VncReadWriteAuthRequiredOverride: boolPtr(true),
   102  		VncReadAuthRequired:              boolPtr(false),
   103  		VncReadAuthRequiredOverride:      boolPtr(true),
   104  	}
   105  
   106  	cfg, err := service.UpdateBannerConfig(context.Background(), "test-banner-edge-id", updateCfg)
   107  	assert.NoError(t, err)
   108  	assert.NotNil(t, cfg)
   109  	assert.Equal(t, false, cfg.VncReadWriteAuthRequired)
   110  	assert.Equal(t, true, cfg.VncReadWriteAuthRequiredOverride)
   111  	assert.Equal(t, false, cfg.VncReadAuthRequired)
   112  	assert.Equal(t, true, cfg.VncReadAuthRequiredOverride)
   113  	assert.NoError(t, mock.ExpectationsWereMet())
   114  }
   115  
   116  // TestUpsertBannerConfig tests whether a new entry is correctly inserted if it does not exist
   117  func TestUpsertBannerConfig(t *testing.T) {
   118  	db, mock, err := sqlmock.New()
   119  	assert.NoError(t, err)
   120  	defer db.Close()
   121  
   122  	service := NewBannerConfigService(db)
   123  
   124  	// No existing rows
   125  	mock.ExpectQuery("SELECT config_key, config_value FROM banner_configs WHERE banner_edge_id = \\$1").
   126  		WithArgs("test-banner-edge-id").
   127  		WillReturnRows(sqlmock.NewRows([]string{"config_key", "config_value"}))
   128  
   129  	mock.ExpectBegin()
   130  	// dont match the insert order here onwards as we are inserting from a map, which is unordered
   131  	mock.MatchExpectationsInOrder(false)
   132  	mock.ExpectExec("INSERT INTO banner_configs").
   133  		WithArgs("test-banner-edge-id", VNCReadWriteAuthRequired, "true").
   134  		WillReturnResult(sqlmock.NewResult(1, 1))
   135  	mock.ExpectExec("INSERT INTO banner_configs").
   136  		WithArgs("test-banner-edge-id", VNCReadWriteAuthRequiredOverride, "false").
   137  		WillReturnResult(sqlmock.NewResult(1, 1))
   138  	mock.ExpectExec("INSERT INTO banner_configs").
   139  		WithArgs("test-banner-edge-id", VNCReadAuthRequired, "true").
   140  		WillReturnResult(sqlmock.NewResult(1, 1))
   141  	mock.ExpectExec("INSERT INTO banner_configs").
   142  		WithArgs("test-banner-edge-id", VNCReadAuthRequiredOverride, "false").
   143  		WillReturnResult(sqlmock.NewResult(1, 1))
   144  	mock.ExpectCommit()
   145  
   146  	upsertCfg := &model.UpdateBannerConfig{
   147  		VncReadWriteAuthRequired:         boolPtr(true),
   148  		VncReadWriteAuthRequiredOverride: boolPtr(false),
   149  		VncReadAuthRequired:              boolPtr(true),
   150  		VncReadAuthRequiredOverride:      boolPtr(false),
   151  	}
   152  
   153  	cfg, err := service.UpdateBannerConfig(context.Background(), "test-banner-edge-id", upsertCfg)
   154  	assert.NoError(t, err)
   155  	assert.NotNil(t, cfg)
   156  	assert.Equal(t, true, cfg.VncReadWriteAuthRequired)
   157  	assert.Equal(t, false, cfg.VncReadWriteAuthRequiredOverride)
   158  	assert.Equal(t, true, cfg.VncReadAuthRequired)
   159  	assert.Equal(t, false, cfg.VncReadAuthRequiredOverride)
   160  	assert.NoError(t, mock.ExpectationsWereMet())
   161  }
   162  
   163  func boolPtr(b bool) *bool {
   164  	return &b
   165  }
   166  

View as plain text