package entity

import (
	"testing"

	"github.com/stretchr/testify/suite"
)

type BucketExtTestSuite struct {
	suite.Suite
}

func TestBucketExtSuite(t *testing.T) {
	suite.Run(t, new(BucketExtTestSuite))
}

func (s *BucketExtTestSuite) TestGetAndSetRTCEnabled() {
	tests := map[string]struct {
		setup          func(b *Bucket)
		expectedValue  bool
		checkExtension bool
		expectedExtVal string
	}{
		"zero value - disabled": {
			setup:         func(b *Bucket) {},
			expectedValue: false,
		},
		"nil extension - disabled": {
			setup:         func(b *Bucket) { b.Extension = nil },
			expectedValue: false,
		},
		"set true - enabled": {
			setup:          func(b *Bucket) { b.SetRTCEnabled(true) },
			expectedValue:  true,
			checkExtension: true,
			expectedExtVal: "true",
		},
		"set false after true - disabled": {
			setup:          func(b *Bucket) { b.SetRTCEnabled(true); b.SetRTCEnabled(false) },
			expectedValue:  false,
			checkExtension: true,
			expectedExtVal: "false",
		},
	}
	for name, tc := range tests {
		s.Run(name, func() {
			b := &Bucket{}
			tc.setup(b)
			s.Equal(tc.expectedValue, b.GetRTCEnabled())
			if tc.checkExtension {
				s.Equal(tc.expectedExtVal, b.Extension[extKeyRTCEnabled])
			}
		})
	}
}
