diff --git a/db/db.go b/db/db.go index 3d8f6c8..ab9aca9 100644 --- a/db/db.go +++ b/db/db.go @@ -43,6 +43,11 @@ func Connect() *gorm.DB { log.Panic(err) } newUDB := gormDB - gormDB.AutoMigrate(&Word{}) + if err := gormDB.AutoMigrate(&Word{}); err != nil { + log.Panic(err) + } + if err := gormDB.AutoMigrate(&Stat{}); err != nil { + log.Panic(err) + } return newUDB } diff --git a/db/stat.go b/db/stat.go new file mode 100644 index 0000000..4cc32f2 --- /dev/null +++ b/db/stat.go @@ -0,0 +1,18 @@ +package db + +import ( + "gorm.io/gorm" +) + +type Stat struct { + gorm.Model + Skipped uint + Correct uint + False uint + Words uint + Finished bool + CPM float64 + WPM float64 + // Time in milliseconds + TimeTaken int64 +} diff --git a/db/stat_test.go b/db/stat_test.go new file mode 100644 index 0000000..0799d8a --- /dev/null +++ b/db/stat_test.go @@ -0,0 +1,47 @@ +package db_test + +import ( + "testing" + "time" + "tipitypy/db" + + "gorm.io/driver/sqlite" + "gorm.io/gorm" +) + +// Setup a test database +func setupDB() (*gorm.DB, error) { + dbc, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{}) + if err != nil { + return nil, err + } + dbc.AutoMigrate(&db.Stat{}) + return dbc, nil +} + +func TestTypingSession(t *testing.T) { + dbc, err := setupDB() + if err != nil { + t.Fatalf("failed to connect to test database: %v", err) + } + + // Insert a record + expectedDuration := 5 * time.Second + session := db.Stat{ + TimeTaken: expectedDuration.Milliseconds(), + } + if err := dbc.Create(&session).Error; err != nil { + t.Fatalf("failed to insert session: %v", err) + } + + // Retrieve the record + var retrieved db.Stat + if err := dbc.First(&retrieved, session.ID).Error; err != nil { + t.Fatalf("failed to retrieve session: %v", err) + } + + // Compare values + if retrieved.TimeTaken != expectedDuration.Milliseconds() { + t.Errorf("expected %d ms, got %d ms", expectedDuration.Milliseconds(), retrieved.TimeTaken) + } +}