Skip to content

Commit 5f0f17f

Browse files
committed
add relation specs for db.list computed keys on relation
1 parent 4c7fc0a commit 5f0f17f

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

spec/relations_spec.moon

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2149,4 +2149,77 @@ describe "lapis.db.model.relations", ->
21492149
[[SELECT * FROM "user_tags" WHERE "user_id" IN ('uid-123', 'uid-999')]]
21502150
}
21512151

2152+
describe "has_many with computed key returning list", ->
2153+
local Users, UserTags
2154+
2155+
before_each ->
2156+
models.Users = class Users extends Model
2157+
@relations: {
2158+
{"tags", has_many: "UserTags", key: {
2159+
user_id: (user) -> db.list user.tag_owner_ids
2160+
}}
2161+
}
2162+
2163+
models.UserTags = class UserTags extends Model
2164+
2165+
2166+
it "fetches with getter", ->
2167+
mock_query "SELECT", {
2168+
{ id: 101, user_id: 10 }
2169+
{ id: 102, user_id: 20 }
2170+
}
2171+
2172+
2173+
user = Users\load {
2174+
tag_owner_ids: {10, 20}
2175+
}
2176+
2177+
assert.same {
2178+
{ id: 101, user_id: 10 }
2179+
{ id: 102, user_id: 20 }
2180+
}, user\get_tags!
2181+
2182+
assert_queries {
2183+
[[SELECT * FROM "user_tags" WHERE "user_id" IN (10, 20)]]
2184+
}
2185+
2186+
it "preloads", ->
2187+
mock_query "SELECT", {
2188+
{ id: 201, user_id: 20 }
2189+
{ id: 202, user_id: 30 }
2190+
{ id: 203, user_id: 40 }
2191+
}
2192+
2193+
import preload from require "lapis.db.model"
2194+
users = {
2195+
Users\load {
2196+
tag_owner_ids: {20}
2197+
}
2198+
Users\load {
2199+
tag_owner_ids: {30, 40}
2200+
}
2201+
Users\load {
2202+
tag_owner_ids: {10, 20}
2203+
}
2204+
}
2205+
2206+
preload users, "tags"
2207+
2208+
assert_queries {
2209+
[[SELECT * FROM "user_tags" WHERE "user_id" IN (20, 30, 40, 10)]]
2210+
}
2211+
2212+
assert.same {
2213+
{ id: 201, user_id: 20 }
2214+
}, users[1].tags
2215+
2216+
assert.same {
2217+
{ id: 202, user_id: 30 }
2218+
{ id: 203, user_id: 40 }
2219+
}, users[2].tags
2220+
2221+
assert.same {
2222+
{ id: 201, user_id: 20 }
2223+
}, users[3].tags
2224+
21522225

0 commit comments

Comments
 (0)