package container

import (
	"testing"
)

func TestSessionManager_New(t *testing.T) {

	informationManager := NewInformationManager()
	sessionManager := NewSessionManager(informationManager, transactionHandlerFactoryMock)
	if sessionManager == nil {
		t.Fatalf("创建失败!")
	}
	defaultSessionManager, ok := sessionManager.(*DefaultSessionManager)
	if !ok {
		t.Fatalf("会话管理器类型不正确!")
	}
	if defaultSessionManager.informationManager == nil {
		t.Fatalf("组件信息管理器不能为空!")
	}
	if defaultSessionManager.transactionHandlerFactory == nil {
		t.Fatalf("事务句柄工厂不能为空!")
	}
	if len(defaultSessionManager.user2SessionMapping) != 0 {
		t.Fatalf("用户会话映射量错误!")
	}
	if len(defaultSessionManager.sessionMapping) != 0 {
		t.Fatalf("会话映射数量错误!")
	}
}

func TestSessionManager_New_NullInformationManager(t *testing.T) {
	defer func() {
		if err := recover(); err != "组件信息管理器不能为空!" {
			t.Fatalf("意外错误:%s", err)
		}
	}()

	_ = NewSessionManager(nil, transactionHandlerFactoryMock)
	t.Fatalf("意外的没有错误!")
}

func TestSessionManager_New_NullTransactionHandlerFactoryMock(t *testing.T) {
	defer func() {
		if err := recover(); err != "事务句柄工厂不能为空!" {
			t.Fatalf("意外错误:%s", err)
		}
	}()

	informationManager := NewInformationManager()
	_ = NewSessionManager(informationManager, nil)
	t.Fatalf("意外的没有错误!")
}
