mirror of
https://github.com/livebook-dev/livebook.git
synced 2024-09-20 10:05:57 +08:00
Improve Enterprise integration with real data (#1548)
This commit is contained in:
parent
3385e20f9c
commit
60bc7194ed
|
@ -10,7 +10,7 @@ defmodule Livebook.Hubs.Enterprise do
|
|||
id: String.t() | nil,
|
||||
url: String.t() | nil,
|
||||
token: String.t() | nil,
|
||||
external_id: String.t() | nil,
|
||||
external_id: pos_integer() | nil,
|
||||
hub_name: String.t() | nil,
|
||||
hub_color: String.t() | nil
|
||||
}
|
||||
|
|
|
@ -2,6 +2,6 @@ defmodule LivebookProto.User do
|
|||
@moduledoc false
|
||||
use Protobuf, protoc_gen_elixir_version: "0.11.0", syntax: :proto3
|
||||
|
||||
field :id, 1, type: :string
|
||||
field :id, 1, type: :int32
|
||||
field :email, 2, type: :string
|
||||
end
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
syntax = "proto3";
|
||||
|
||||
message User {
|
||||
string id = 1;
|
||||
int32 id = 1;
|
||||
string email = 2;
|
||||
}
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ defmodule Livebook.WebSocketTest do
|
|||
end
|
||||
|
||||
describe "send_request/2" do
|
||||
test "receives the session response from server", %{url: url, token: token} do
|
||||
test "receives the session response from server", %{url: url, token: token, user: user} do
|
||||
headers = [{"X-Auth-Token", token}]
|
||||
|
||||
assert {:ok, %WebSocket.Connection{} = connection, :connected} =
|
||||
|
@ -43,7 +43,8 @@ defmodule Livebook.WebSocketTest do
|
|||
|
||||
assert WebSocket.disconnect(connection) == :ok
|
||||
|
||||
assert session_response.user.email == "jake.peralta@mail.com"
|
||||
assert session_response.user.id == user.id
|
||||
assert session_response.user.email == user.email
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -6,8 +6,8 @@ defmodule LivebookWeb.Hub.New.EnterpriseComponentTest do
|
|||
alias Livebook.Hubs
|
||||
|
||||
describe "enterprise" do
|
||||
test "persists new hub", %{conn: conn, url: url, token: token} do
|
||||
Livebook.Hubs.delete_hub("enterprise-bf1587a3-4501-4729-9f53-43679381e28b")
|
||||
test "persists new hub", %{conn: conn, url: url, token: token, user: user} do
|
||||
Livebook.Hubs.delete_hub("enterprise-#{user.id}")
|
||||
|
||||
{:ok, view, _html} = live(conn, Routes.hub_path(conn, :new))
|
||||
|
||||
|
@ -28,7 +28,7 @@ defmodule LivebookWeb.Hub.New.EnterpriseComponentTest do
|
|||
|> element("#connect")
|
||||
|> render_click()
|
||||
|
||||
assert render(view) =~ "bf1587a3-4501-4729-9f53-43679381e28b"
|
||||
assert render(view) =~ to_string(user.id)
|
||||
|
||||
attrs = %{
|
||||
"url" => url,
|
||||
|
@ -56,7 +56,7 @@ defmodule LivebookWeb.Hub.New.EnterpriseComponentTest do
|
|||
|
||||
hubs_html = view |> element("#hubs") |> render()
|
||||
assert hubs_html =~ ~s/style="color: #FF00FF"/
|
||||
assert hubs_html =~ "/hub/enterprise-bf1587a3-4501-4729-9f53-43679381e28b"
|
||||
assert hubs_html =~ "/hub/enterprise-#{user.id}"
|
||||
assert hubs_html =~ "Enterprise"
|
||||
end
|
||||
|
||||
|
@ -85,11 +85,11 @@ defmodule LivebookWeb.Hub.New.EnterpriseComponentTest do
|
|||
refute render(view) =~ "enterprise[hub_name]"
|
||||
end
|
||||
|
||||
test "fails to create existing hub", %{conn: conn, url: url, token: token} do
|
||||
test "fails to create existing hub", %{conn: conn, url: url, token: token, user: user} do
|
||||
hub =
|
||||
insert_hub(:enterprise,
|
||||
id: "enterprise-bf1587a3-4501-4729-9f53-43679381e28b",
|
||||
external_id: "bf1587a3-4501-4729-9f53-43679381e28b",
|
||||
id: "enterprise-#{user.id}",
|
||||
external_id: user.id,
|
||||
url: url,
|
||||
token: token
|
||||
)
|
||||
|
@ -113,7 +113,7 @@ defmodule LivebookWeb.Hub.New.EnterpriseComponentTest do
|
|||
|> element("#connect")
|
||||
|> render_click()
|
||||
|
||||
assert render(view) =~ "bf1587a3-4501-4729-9f53-43679381e28b"
|
||||
assert render(view) =~ to_string(user.id)
|
||||
|
||||
attrs = %{
|
||||
"url" => url,
|
||||
|
|
|
@ -16,6 +16,7 @@ defmodule Livebook.EnterpriseIntegrationCase do
|
|||
setup_all do
|
||||
EnterpriseServer.start()
|
||||
|
||||
{:ok, url: EnterpriseServer.url(), token: EnterpriseServer.token()}
|
||||
{:ok,
|
||||
url: EnterpriseServer.url(), token: EnterpriseServer.token(), user: EnterpriseServer.user()}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -10,12 +10,7 @@ defmodule Livebook.Factory do
|
|||
end
|
||||
|
||||
def build(:fly_metadata) do
|
||||
%Livebook.Hubs.Metadata{
|
||||
id: "fly-foo-bar-baz",
|
||||
name: "My Personal Hub",
|
||||
color: "#FF00FF",
|
||||
provider: build(:fly)
|
||||
}
|
||||
:fly |> build() |> Livebook.Hubs.Provider.normalize()
|
||||
end
|
||||
|
||||
def build(:fly) do
|
||||
|
@ -32,18 +27,11 @@ defmodule Livebook.Factory do
|
|||
end
|
||||
|
||||
def build(:enterprise_metadata) do
|
||||
id = Livebook.Utils.random_short_id()
|
||||
|
||||
%Livebook.Hubs.Metadata{
|
||||
id: "enterprise-#{id}",
|
||||
name: "Enterprise",
|
||||
color: "#FF00FF",
|
||||
provider: build(:enterprise)
|
||||
}
|
||||
:enterprise |> build() |> Livebook.Hubs.Provider.normalize()
|
||||
end
|
||||
|
||||
def build(:enterprise) do
|
||||
id = Livebook.Utils.random_short_id()
|
||||
id = :erlang.phash2(Livebook.Utils.random_short_id())
|
||||
|
||||
%Livebook.Hubs.Enterprise{
|
||||
id: "enterprise-#{id}",
|
||||
|
|
|
@ -2,6 +2,8 @@ defmodule Livebook.EnterpriseServer do
|
|||
@moduledoc false
|
||||
use GenServer
|
||||
|
||||
defstruct [:token, :user, :node, :port]
|
||||
|
||||
@name __MODULE__
|
||||
|
||||
def start do
|
||||
|
@ -16,11 +18,16 @@ defmodule Livebook.EnterpriseServer do
|
|||
GenServer.call(@name, :fetch_token)
|
||||
end
|
||||
|
||||
def user do
|
||||
GenServer.call(@name, :fetch_user)
|
||||
end
|
||||
|
||||
# GenServer Callbacks
|
||||
|
||||
@impl true
|
||||
def init(_opts) do
|
||||
{:ok, %{token: nil, node: enterprise_node(), port: nil}, {:continue, :start_enterprise}}
|
||||
state = %__MODULE__{node: enterprise_node()}
|
||||
{:ok, state, {:continue, :start_enterprise}}
|
||||
end
|
||||
|
||||
@impl true
|
||||
|
@ -30,9 +37,16 @@ defmodule Livebook.EnterpriseServer do
|
|||
|
||||
@impl true
|
||||
def handle_call(:fetch_token, _from, state) do
|
||||
token = state.token || fetch_token_from_enterprise(state)
|
||||
state = if _ = state.token, do: state, else: create_enterprise_token(state)
|
||||
|
||||
{:reply, token, %{state | token: token}}
|
||||
{:reply, state.token, state}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_call(:fetch_user, _from, state) do
|
||||
state = if _ = state.user, do: state, else: create_enterprise_user(state)
|
||||
|
||||
{:reply, state.user, state}
|
||||
end
|
||||
|
||||
# Port Callbacks
|
||||
|
@ -50,8 +64,24 @@ defmodule Livebook.EnterpriseServer do
|
|||
|
||||
# Private
|
||||
|
||||
defp fetch_token_from_enterprise(state) do
|
||||
:erpc.call(state.node, Enterprise.Integration, :fetch_token, [])
|
||||
defp create_enterprise_token(state) do
|
||||
if user = state.user do
|
||||
token = call_erpc_function(state.node, :generate_user_session_token!, [user])
|
||||
%{state | token: token}
|
||||
else
|
||||
user = call_erpc_function(state.node, :create_user)
|
||||
token = call_erpc_function(state.node, :generate_user_session_token!, [user])
|
||||
|
||||
%{state | user: user, token: token}
|
||||
end
|
||||
end
|
||||
|
||||
defp create_enterprise_user(state) do
|
||||
%{state | user: call_erpc_function(state.node, :create_user)}
|
||||
end
|
||||
|
||||
defp call_erpc_function(node, function, args \\ []) do
|
||||
:erpc.call(node, Enterprise.Integration, function, args)
|
||||
end
|
||||
|
||||
defp start_enterprise(state) do
|
||||
|
|
Loading…
Reference in a new issue