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  }