Added firmware endpoint

Necessary to handle the request and response of the firmware API endpoint.
This commit is contained in:
Brooke Kuhlmann
2025-04-22 14:24:34 -06:00
parent 2da39573fc
commit a941c8f180
2 changed files with 82 additions and 0 deletions
+22
View File
@@ -0,0 +1,22 @@
# frozen_string_literal: true
require "pipeable"
module TRMNL
module API
module Endpoints
# Handles API request/response.
class Firmware
include Dependencies[:client, contract: "contracts.firmware", model: "models.firmware"]
include Pipeable
def call
pipe client.get("firmware/latest"),
try(:parse, catch: JSON::ParserError),
validate(contract, as: :to_h),
to(model, :for)
end
end
end
end
end
@@ -0,0 +1,60 @@
# frozen_string_literal: true
require "spec_helper"
RSpec.describe TRMNL::API::Endpoints::Firmware do
subject(:endpoint) { described_class.new client: }
include_context "with application dependencies"
let(:client) { TRMNL::API::Client.new http: }
describe "#call" do
let :http do
HTTP::Fake::Client.new do
get "/api/firmware/latest" do
headers["Content-Type"] = "application/json"
status 200
<<~JSON
{
"url": "https://test.io/FW1.2.3.bin",
"version": "1.2.3"
}
JSON
end
end
end
it "answers success" do
result = endpoint.call
expect(result).to be_success(
TRMNL::API::Models::Firmware[
url: "https://test.io/FW1.2.3.bin",
version: "1.2.3"
]
)
end
context "with failure" do
let :http do
HTTP::Fake::Client.new do
get "/api/firmware/latest" do
headers["Content-Type"] = "application/json"
status 404
<<~JSON
{"error": "Danger!"}
JSON
end
end
end
it "answers failure" do
result = described_class.new(client:).call
expect(result).to match(Failure(be_a(HTTP::Response)))
end
end
end
end