github.com/k0marov/go-socnet@v0.0.0-20220715154813-90d07867c782/features/comments/store/sql_db/sql_db_test.go (about) 1 package sql_db_test 2 3 import ( 4 "github.com/k0marov/go-socnet/core/general/core_values" 5 . "github.com/k0marov/go-socnet/core/helpers/test_helpers" 6 "testing" 7 "time" 8 9 "github.com/k0marov/go-socnet/features/comments/domain/models" 10 "github.com/k0marov/go-socnet/features/comments/domain/values" 11 "github.com/k0marov/go-socnet/features/comments/store/sql_db" 12 post_models "github.com/k0marov/go-socnet/features/posts/domain/models" 13 post_values "github.com/k0marov/go-socnet/features/posts/domain/values" 14 posts_db "github.com/k0marov/go-socnet/features/posts/store/sql_db" 15 profiles_db "github.com/k0marov/go-socnet/features/profiles/store/sql_db" 16 _ "github.com/mattn/go-sqlite3" 17 ) 18 19 func TestSqlDB_ErrorHandling(t *testing.T) { 20 db := OpenSqliteDB(t) 21 sqlDB, err := sql_db.NewSqlDB(db) 22 AssertNoError(t, err) 23 db.Close() // this will make all calls to db throw 24 t.Run("GetComments", func(t *testing.T) { 25 _, err := sqlDB.GetComments(RandomString()) 26 AssertSomeError(t, err) 27 }) 28 t.Run("Create", func(t *testing.T) { 29 _, err := sqlDB.Create(RandomNewComment(), RandomTime()) 30 AssertSomeError(t, err) 31 }) 32 } 33 34 func TestSqlDB(t *testing.T) { 35 createComment := func(t testing.TB, db *sql_db.SqlDB, post post_values.PostId, author core_values.UserId, yearCreatedAt int) models.CommentModel { 36 t.Helper() 37 newComment := values.NewCommentValue{ 38 Author: author, 39 Post: post, 40 Text: RandomString(), 41 } 42 createdAt := time.Date(yearCreatedAt, 0, 0, 0, 0, 0, 0, time.UTC) 43 id, err := db.Create(newComment, createdAt) 44 AssertNoError(t, err) 45 return models.CommentModel{ 46 Id: id, 47 AuthorId: author, 48 Text: newComment.Text, 49 CreatedAt: createdAt.Unix(), 50 } 51 } 52 getComments := func(t testing.TB, db *sql_db.SqlDB, post post_values.PostId) []models.CommentModel { 53 t.Helper() 54 comments, err := db.GetComments(post) 55 AssertNoError(t, err) 56 return comments 57 } 58 59 t.Run("creating and reading comments", func(t *testing.T) { 60 db := OpenSqliteDB(t) 61 sqlDB, err := sql_db.NewSqlDB(db) 62 AssertNoError(t, err) 63 profilesDb, _ := profiles_db.NewSqlDB(db) 64 postsDb, _ := posts_db.NewSqlDB(db) 65 66 // create an author profile 67 author := RandomProfileModel() 68 profilesDb.CreateProfile(author) 69 70 // create a post 71 postId, _ := postsDb.CreatePost(post_models.PostToCreate{ 72 Author: author.Id, 73 Text: RandomString(), 74 CreatedAt: time.Now(), 75 }) 76 77 // create a commenter profile 78 commenter := RandomProfileModel() 79 profilesDb.CreateProfile(commenter) 80 81 // create the first comment 82 firstComment := createComment(t, sqlDB, postId, commenter.Id, 2020) 83 84 // assert it was created 85 comments := getComments(t, sqlDB, postId) 86 AssertFatal(t, len(comments), 1, "number of post comments") 87 Assert(t, comments[0], firstComment, "the created comment") 88 89 // create the second comment 90 secondComment := createComment(t, sqlDB, postId, commenter.Id, 2022) 91 92 // assert it was created (and comments are returned ordered by createdAt) 93 comments = getComments(t, sqlDB, postId) 94 AssertFatal(t, len(comments), 2, "number of post comments") 95 Assert(t, comments[0], secondComment, "the second created comment") 96 Assert(t, comments[1], firstComment, "the first created comment") 97 }) 98 }