72 lines
2.1 KiB
Go
72 lines
2.1 KiB
Go
package model
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestCodeSubmissionSerialization(t *testing.T) {
|
|
// Create a submission
|
|
now := time.Now()
|
|
submission := CodeSubmission{
|
|
ID: "test-id",
|
|
Code: "print('Hello, World!')",
|
|
Language: "python",
|
|
Input: "test input",
|
|
Status: "completed",
|
|
QueuedAt: now.Add(-2 * time.Second),
|
|
StartedAt: now.Add(-1 * time.Second),
|
|
CompletedAt: now,
|
|
Output: "Hello, World!",
|
|
}
|
|
|
|
// Serialize to JSON
|
|
jsonBytes, err := json.Marshal(submission)
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, jsonBytes)
|
|
|
|
// Deserialize back
|
|
var decoded CodeSubmission
|
|
err = json.Unmarshal(jsonBytes, &decoded)
|
|
assert.NoError(t, err)
|
|
|
|
// Verify fields match
|
|
assert.Equal(t, submission.ID, decoded.ID)
|
|
assert.Equal(t, submission.Code, decoded.Code)
|
|
assert.Equal(t, submission.Language, decoded.Language)
|
|
assert.Equal(t, submission.Input, decoded.Input)
|
|
assert.Equal(t, submission.Status, decoded.Status)
|
|
assert.Equal(t, submission.Output, decoded.Output)
|
|
|
|
// Time fields need special handling due to JSON serialization
|
|
assert.Equal(t, submission.QueuedAt.Format(time.RFC3339), decoded.QueuedAt.Format(time.RFC3339))
|
|
assert.Equal(t, submission.StartedAt.Format(time.RFC3339), decoded.StartedAt.Format(time.RFC3339))
|
|
assert.Equal(t, submission.CompletedAt.Format(time.RFC3339), decoded.CompletedAt.Format(time.RFC3339))
|
|
}
|
|
|
|
func TestCodeSubmissionDefaults(t *testing.T) {
|
|
// Test that zero time values work correctly
|
|
submission := CodeSubmission{
|
|
ID: "test-id",
|
|
Code: "print('Hello')",
|
|
Language: "python",
|
|
Status: "pending",
|
|
}
|
|
|
|
assert.True(t, submission.QueuedAt.IsZero())
|
|
assert.True(t, submission.StartedAt.IsZero())
|
|
assert.True(t, submission.CompletedAt.IsZero())
|
|
|
|
// Test JSON marshaling with zero time values
|
|
jsonBytes, err := json.Marshal(submission)
|
|
assert.NoError(t, err)
|
|
|
|
// The zero time values should still be included in the JSON
|
|
jsonStr := string(jsonBytes)
|
|
assert.Contains(t, jsonStr, `"id":"test-id"`)
|
|
assert.Contains(t, jsonStr, `"status":"pending"`)
|
|
}
|