lune/tests/serde/json/decode.luau

53 lines
1.4 KiB
Text

local net = require("@lune/net")
local serde = require("@lune/serde")
type Response = {
products: {
{
id: number,
title: string,
description: string,
price: number,
discountPercentage: number,
rating: number,
stock: number,
brand: string,
category: string,
thumbnail: string,
images: { string },
}
},
total: number,
skip: number,
limit: number,
}
local response = net.request("https://dummyjson.com/products")
assert(response.ok, "Dummy JSON api returned an error")
assert(#response.body > 0, "Dummy JSON api returned empty body")
local data: Response = serde.decode("json", response.body)
assert(type(data.limit) == "number", "Products limit was not a number")
assert(type(data.products) == "table", "Products was not a table")
assert(#data.products > 0, "Products table was empty")
local productCount = 0
for _, product in data.products do
productCount += 1
assert(type(product.id) == "number", "Product id was not a number")
assert(type(product.title) == "string", "Product title was not a number")
assert(type(product.description) == "string", "Product description was not a number")
assert(type(product.images) == "table", "Product images was not a table")
assert(#product.images > 0, "Product images table was empty")
end
assert(
data.limit == productCount,
string.format(
"Products limit and number of products in array mismatch (expected %d, got %d)",
data.limit,
productCount
)
)