mirror of
https://github.com/usetrmnl/trmnl-api.git
synced 2026-04-29 13:35:13 -07:00
Added display endpoint
Necessary to handle the request and response of the display API endpoint.
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user