# frozen_string_literal: true require "test_helper" require_relative "../../../lib/cable_ready" class CableReady::CableCarTest < ActiveSupport::TestCase setup do @cable_car = CableReady::CableCar.instance end test "dispatch should return json-ifiable payload" do CableReady::CableCar.instance.reset! dispatch = CableReady::CableCar.instance.inner_html(selector: "#users", html: "winning").dispatch assert_equal([{"operation" => "innerHtml", "selector" => "#users", "html" => "winning"}], dispatch) end test "dispatch should clear operations" do CableReady::CableCar.instance.reset! CableReady::CableCar.instance.inner_html(selector: "#users", html: "winning").dispatch assert_equal([], CableReady::CableCar.instance.instance_variable_get(:@enqueued_operations)) end test "dispatch should maintain operations if clear is false" do CableReady::CableCar.instance.reset! CableReady::CableCar.instance.inner_html(selector: "#users", html: "winning").dispatch(clear: false) assert_equal([{"operation" => "innerHtml", "selector" => "#users", "html" => "winning"}], CableReady::CableCar.instance.instance_variable_get(:@enqueued_operations)) end test "selectors should accept any object which respond_to? to_dom_selector" do CableReady::CableCar.instance.reset! my_object = Struct.new(:id) do def to_dom_selector ".#{id}" end end.new("users") dispatch = CableReady::CableCar.instance.inner_html(selector: my_object, html: "winning").dispatch assert_equal([{"operation" => "innerHtml", "selector" => ".users", "html" => "winning"}], dispatch) end test "selectors should accept any object which respond_to? to_dom_id" do CableReady::CableCar.instance.reset! my_object = Struct.new(:id) do def to_dom_id id end end.new("users") dispatch = CableReady::CableCar.instance.inner_html(selector: my_object, html: "winning").dispatch assert_equal([{"operation" => "innerHtml", "selector" => "#users", "html" => "winning"}], dispatch) end end