108 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package handlers
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 	"gralias/models"
 | |
| 	"os"
 | |
| 	"testing"
 | |
| )
 | |
| 
 | |
| func TestSaveState(t *testing.T) {
 | |
| 	// Create test state
 | |
| 	state := &models.UserState{
 | |
| 		Username: "testuser",
 | |
| 		RoomID:   "testroom",
 | |
| 		Team:     models.UserTeamBlue,
 | |
| 		Role:     models.UserRoleMime,
 | |
| 	}
 | |
| 
 | |
| 	// Save state
 | |
| 	err := saveState(state.Username, state)
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("saveState failed: %v", err)
 | |
| 	}
 | |
| 
 | |
| 	// Load state
 | |
| 	loadedState, err := loadState(state.Username)
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("loadState failed: %v", err)
 | |
| 	}
 | |
| 
 | |
| 	// Verify loaded state matches original
 | |
| 	if loadedState.Username != state.Username {
 | |
| 		t.Errorf("Username mismatch: got %s, want %s", loadedState.Username, state.Username)
 | |
| 	}
 | |
| 	if loadedState.RoomID != state.RoomID {
 | |
| 		t.Errorf("RoomID mismatch: got %s, want %s", loadedState.RoomID, state.RoomID)
 | |
| 	}
 | |
| 	if loadedState.Team != state.Team {
 | |
| 		t.Errorf("Team mismatch: got %s, want %s", loadedState.Team, state.Team)
 | |
| 	}
 | |
| 	if loadedState.Role != state.Role {
 | |
| 		t.Errorf("Role mismatch: got %s, want %s", loadedState.Role, state.Role)
 | |
| 	}
 | |
| 
 | |
| 	// Test JSON serialization/deserialization
 | |
| 	data, err := json.Marshal(state)
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("marshal failed: %v", err)
 | |
| 	}
 | |
| 	testMap := make(map[string][]byte)
 | |
| 	testMap["testkey"] = data
 | |
| 
 | |
| 	// Create a temporary file
 | |
| 	tmpFile, err := os.CreateTemp("", "test_store_*.json")
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("failed to create temp file: %v", err)
 | |
| 	}
 | |
| 	tmpFileName := tmpFile.Name()
 | |
| 	// defer os.Remove(tmpFileName)
 | |
| 
 | |
| 	// Write testMap to the temp file
 | |
| 	fileData, err := json.Marshal(testMap)
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("failed to marshal testMap: %v", err)
 | |
| 	}
 | |
| 	if err := os.WriteFile(tmpFileName, fileData, 0644); err != nil {
 | |
| 		t.Fatalf("failed to write to temp file: %v", err)
 | |
| 	}
 | |
| 
 | |
| 	// Read the temp file
 | |
| 	readData, err := os.ReadFile(tmpFileName)
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("failed to read temp file: %v", err)
 | |
| 	}
 | |
| 
 | |
| 	// Unmarshal the data
 | |
| 	var testMapRead map[string][]byte
 | |
| 	if err := json.Unmarshal(readData, &testMapRead); err != nil {
 | |
| 		t.Fatalf("failed to unmarshal testMap: %v", err)
 | |
| 	}
 | |
| 
 | |
| 	// Get the state bytes from the map
 | |
| 	stateBytes, ok := testMapRead["testkey"]
 | |
| 	if !ok {
 | |
| 		t.Fatalf("key 'testkey' not found in testMapRead")
 | |
| 	}
 | |
| 
 | |
| 	// Unmarshal the state bytes
 | |
| 	stateRead := &models.UserState{}
 | |
| 	if err := json.Unmarshal(stateBytes, stateRead); err != nil {
 | |
| 		t.Fatalf("failed to unmarshal state: %v", err)
 | |
| 	}
 | |
| 
 | |
| 	// Compare the state
 | |
| 	if stateRead.Username != state.Username {
 | |
| 		t.Errorf("Username mismatch from file: got %s, want %s", stateRead.Username, state.Username)
 | |
| 	}
 | |
| 	if stateRead.RoomID != state.RoomID {
 | |
| 		t.Errorf("RoomID mismatch from file: got %s, want %s", stateRead.RoomID, state.RoomID)
 | |
| 	}
 | |
| 	if stateRead.Team != state.Team {
 | |
| 		t.Errorf("Team mismatch from file: got %s, want %s", stateRead.Team, state.Team)
 | |
| 	}
 | |
| 	if stateRead.Role != state.Role {
 | |
| 		t.Errorf("Role mismatch from file: got %s, want %s", stateRead.Role, state.Role)
 | |
| 	}
 | |
| }
 | 
