defmodule Diffuser.Generator.PromptRequestTest do use Diffuser.DataCase import Diffuser.GeneratorFixtures alias Diffuser.Generator alias Diffuser.Generator.PromptRequest alias DiffuserWeb.Endpoint import Phoenix.ChannelTest # The default endpoint for testing # @endpoint DiffuserWeb.Endpoint # TODO: Write mock that calls python script that only sleeps for 300 milliseconds test "starts a new prompt and can query status while it's running" do prompt_request = prompt_request_fixture() assert {:ok, _pid} = Diffuser.Generator.PromptRequestGenserver.new(%{prompt_request: prompt_request}) :timer.sleep(1000) assert %{status: "in_progress"} = Generator.get_prompt_request!(prompt_request.id) :timer.sleep(3000) assert %{status: "finished"} = Diffuser.Generator.get_prompt_request!(prompt_request.id) end test "properly updates when prompt is finished via websocket" do %{id: id} = prompt_request = prompt_request_fixture() Endpoint.subscribe("request:#{id}") Diffuser.Generator.PromptRequestGenserver.new(%{prompt_request: prompt_request}) :timer.sleep(1000) assert_broadcast("request", %{ prompt_request: %PromptRequest{id: ^id} }) :timer.sleep(3000) assert_broadcast("request", %{ prompt_request: %PromptRequest{id: ^id} }) end end