go.charczuk.com@v0.0.0-20240327042549-bc490516bd1a/projects/chirp/pkg/model/manager_test.go (about) 1 /* 2 3 Copyright (c) 2023 - Present. Will Charczuk. All rights reserved. 4 Use of this source code is governed by a MIT license that can be found in the LICENSE file at the root of the repository. 5 6 */ 7 8 package model 9 10 import ( 11 "context" 12 "testing" 13 "time" 14 15 "go.charczuk.com/sdk/apputil" 16 "go.charczuk.com/sdk/assert" 17 "go.charczuk.com/sdk/uuid" 18 ) 19 20 func Test_Manager_User(t *testing.T) { 21 appMgr, done := apputil.NewTest(t) 22 defer done() 23 24 mgr := &Manager{BaseManager: appMgr.BaseManager} 25 testData := seedTestData(t, mgr) 26 27 user, found, err := mgr.User(context.Background(), testData.users[0].ID, testData.users[1].ID) 28 assert.ItsNil(t, err) 29 assert.ItsTrue(t, found) 30 assert.ItsEqual(t, testData.users[1].ID, user.ID) 31 assert.ItsEqual(t, false, user.Status.IsSelf) 32 assert.ItsEqual(t, true, user.Status.IsFollowing) 33 } 34 35 func Test_Manager_User_self(t *testing.T) { 36 appMgr, done := apputil.NewTest(t) 37 defer done() 38 39 mgr := &Manager{BaseManager: appMgr.BaseManager} 40 testData := seedTestData(t, mgr) 41 42 user, found, err := mgr.User(context.Background(), testData.users[0].ID, testData.users[0].ID) 43 assert.ItsNil(t, err) 44 assert.ItsTrue(t, found) 45 assert.ItsEqual(t, testData.users[0].ID, user.ID) 46 assert.ItsEqual(t, true, user.Status.IsSelf) 47 assert.ItsEqual(t, false, user.Status.IsFollowing) 48 } 49 50 func Test_Manager_User_notFound(t *testing.T) { 51 appMgr, done := apputil.NewTest(t) 52 defer done() 53 54 mgr := &Manager{BaseManager: appMgr.BaseManager} 55 seedTestData(t, mgr) 56 57 user, found, err := mgr.User(context.Background(), uuid.V4(), uuid.V4()) 58 assert.ItsNil(t, err) 59 assert.ItsFalse(t, found) 60 assert.ItsTrue(t, user.ID.IsZero()) 61 } 62 63 func Test_Manager_Chirp(t *testing.T) { 64 appMgr, done := apputil.NewTest(t) 65 defer done() 66 67 mgr := &Manager{BaseManager: appMgr.BaseManager} 68 testData := seedTestData(t, mgr) 69 70 chirp, found, err := mgr.Chirp(context.Background(), testData.users[0].ID, testData.userChirps[0][0]) 71 assert.ItsNil(t, err) 72 assert.ItsTrue(t, found) 73 assert.ItsEqual(t, testData.userChirps[0][0], chirp.Chirp.ID) 74 assert.ItsEqual(t, testData.users[0].ID, chirp.Chirp.UserID) 75 } 76 77 func Test_Manager_Chirp_notFound(t *testing.T) { 78 appMgr, done := apputil.NewTest(t) 79 defer done() 80 81 mgr := &Manager{BaseManager: appMgr.BaseManager} 82 testData := seedTestData(t, mgr) 83 84 chirp, found, err := mgr.Chirp(context.Background(), testData.users[0].ID, uuid.V4()) 85 assert.ItsNil(t, err) 86 assert.ItsFalse(t, found) 87 assert.ItsTrue(t, chirp.Chirp.ID.IsZero()) 88 } 89 90 func Test_Manager_SearchUsers(t *testing.T) { 91 appMgr, done := apputil.NewTest(t) 92 defer done() 93 94 mgr := &Manager{BaseManager: appMgr.BaseManager} 95 testData := seedTestData(t, mgr) 96 97 users, err := mgr.SearchUsers(context.Background(), testData.users[0].ID, "user") 98 assert.ItsNil(t, err) 99 assert.ItsNotEmpty(t, users) 100 } 101 102 func Test_Manager_FeedForUserID(t *testing.T) { 103 appMgr, done := apputil.NewTest(t) 104 defer done() 105 106 mgr := &Manager{BaseManager: appMgr.BaseManager} 107 testData := seedTestData(t, mgr) 108 109 userID := testData.users[0].ID 110 feed, err := mgr.FeedForUserID(context.Background(), userID, 8, nil) 111 assert.ItsNil(t, err) 112 assert.ItsNotEmpty(t, feed) 113 114 assert.ItsAll(t, feed, func(c ChirpFull) bool { 115 return c.User.PictureURL != "" 116 }) 117 } 118 119 func Test_Manager_FeedForUserID_after(t *testing.T) { 120 appMgr, done := apputil.NewTest(t) 121 defer done() 122 123 mgr := &Manager{BaseManager: appMgr.BaseManager} 124 testData := seedTestData(t, mgr) 125 126 userID := testData.users[0].ID 127 after := testData.userChirps[1][16] 128 feed, err := mgr.FeedForUserID(context.Background(), userID, 8, &after) 129 assert.ItsNil(t, err) 130 assert.ItsNotEmpty(t, feed) 131 132 assert.ItsAny(t, feed, func(c ChirpFull) bool { 133 return c.Chirp.ID == testData.userChirps[1][15] 134 }) 135 assert.ItsEqual(t, testData.userChirps[1][15], feed[0].Chirp.ID) 136 } 137 138 func Test_Manager_ProfileLikes(t *testing.T) { 139 ctx := context.TODO() 140 appMgr, done := apputil.NewTest(t) 141 defer done() 142 143 mgr := &Manager{BaseManager: appMgr.BaseManager} 144 u0 := createTestUser(t, mgr, 0) 145 u1 := createTestUser(t, mgr, 1) 146 147 u0Chirps := createTestChirps(t, mgr, u0.Username(), u0.ID, time.Duration(0)*time.Minute) 148 u1Chirps := createTestChirps(t, mgr, u1.Username(), u1.ID, time.Duration(0)*time.Minute) 149 150 u0liked0 := u1Chirps[0] 151 u0liked1 := u1Chirps[1] 152 u1liked0 := u0Chirps[0] 153 154 var err error 155 err = mgr.LikeChirp(ctx, u0.ID, Chirp{ID: u0liked0, UserID: u0.ID}) 156 assert.ItsNil(t, err) 157 err = mgr.LikeChirp(ctx, u0.ID, Chirp{ID: u0liked1, UserID: u0.ID}) 158 assert.ItsNil(t, err) 159 err = mgr.LikeChirp(ctx, u1.ID, Chirp{ID: u1liked0, UserID: u1.ID}) 160 assert.ItsNil(t, err) 161 162 u0likes, err := mgr.ProfileLikes(ctx, u0.ID, u0.ID, 10, nil) 163 assert.ItsNil(t, err) 164 assert.ItsNotEmpty(t, u0likes) 165 assert.ItsLen(t, u0likes, 2) 166 167 assert.ItsEqual(t, u0liked0, u0likes[1].ID) 168 assert.ItsEqual(t, u0liked1, u0likes[0].ID) 169 } 170 171 func Test_ChirpReplies(t *testing.T) { 172 ctx := context.TODO() 173 appMgr, done := apputil.NewTest(t) 174 defer done() 175 176 mgr := &Manager{BaseManager: appMgr.BaseManager} 177 u0 := createTestUser(t, mgr, 0) 178 u1 := createTestUser(t, mgr, 1) 179 u2 := createTestUser(t, mgr, 2) 180 181 u0Chirps := createTestChirps(t, mgr, u0.Username(), u0.ID, time.Duration(0)*time.Minute) 182 183 // create a reply to a u0 chirp by u1 and u2 184 replyTo(t, mgr, u1.ID, u0Chirps[0]) 185 replyTo(t, mgr, u2.ID, u0Chirps[0]) 186 187 replies, err := mgr.ChirpReplies(ctx, u0.ID, u0Chirps[0]) 188 assert.ItsNil(t, err) 189 assert.ItsLen(t, replies, 2) 190 }