Added display endpoint

Necessary to handle the request and response of the display API endpoint.
This commit is contained in:
Brooke Kuhlmann
2025-04-22 14:24:33 -06:00
parent 9b6446c5bb
commit 2da39573fc
2 changed files with 94 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 Display
include Dependencies[:client, contract: "contracts.display", model: "models.display"]
include Pipeable
def call token:
pipe client.get("display", headers: {"Access-Token" => token}),
try(:parse, catch: JSON::ParserError),
validate(contract, as: :to_h),
to(model, :for)
end
end
end
end
end
@@ -0,0 +1,72 @@
# frozen_string_literal: true
require "spec_helper"
RSpec.describe TRMNL::API::Endpoints::Display do
subject(:endpoint) { described_class.new client: }
include_context "with application dependencies"
let(:client) { TRMNL::API::Client.new http: }
describe "#call" do
context "with success" do
let :http do
HTTP::Fake::Client.new do
get "/api/display" do
headers["Content-Type"] = "application/json"
status 200
<<~JSON
{
"filename": "test.bmp",
"firmware_url": "https://test.io/FW1.4.8.bin",
"image_url": "https://test.io/images/test.bmp",
"refresh_rate": 3200,
"reset_firmware": false,
"special_function": "restart_playlist",
"status": 0,
"update_firmware": true
}
JSON
end
end
end
it "answers response" do
result = endpoint.call token: "secret"
expect(result).to be_success(
TRMNL::API::Models::Display[
filename: "test.bmp",
firmware_url: "https://test.io/FW1.4.8.bin",
image_url: "https://test.io/images/test.bmp",
refresh_rate: 3200,
reset_firmware: false,
special_function: "restart_playlist",
update_firmware: true
]
)
end
end
context "with failure" do
let :http do
HTTP::Fake::Client.new do
get "/api/display" do
headers["Content-Type"] = "application/json"
status 404
<<~JSON
{"error": "Danger!"}
JSON
end
end
end
it "answers failure response" do
result = described_class.new(client:).call token: "secret"
expect(result).to match(Failure(be_a(HTTP::Response)))
end
end
end
end