Update phoenix to 1.6.0

This commit is contained in:
Adrian Kumpf
2021-09-24 21:35:29 +02:00
parent 2df8dc551b
commit 796d0c8ef4
22 changed files with 222 additions and 189 deletions
+5 -4
View File
@@ -28,10 +28,11 @@ npm-debug.log
# The directory NPM downloads your dependencies sources to.
/assets/node_modules/
# Since we are building assets from assets/,
# we ignore priv/static. You may want to comment
# this depending on your deployment strategy.
/priv/static/assets
# Ignore assets that are produced by build tools.
/priv/static/assets/
# Ignore digested assets cache.
/priv/static/cache_manifest.json
# CDLR data repository
/priv/cldr/
+1 -1
View File
@@ -19,7 +19,7 @@
},
"devDependencies": {
"bulma": "^0.9.3",
"esbuild": "^0.13.1",
"esbuild": "^0.13.2",
"esbuild-sass-plugin": "^1.5.5",
"sass": "^1.42.1"
},
+2
View File
@@ -6,3 +6,5 @@ config :logger, level: :warning
# you can enable the server option below.
config :teslamate, TeslaMateWeb.Endpoint, server: false
config :teslamate, TeslaMate.Repo, pool: Ecto.Adapters.SQL.Sandbox
config :phoenix, :plug_init_mode, :runtime
+1 -1
View File
@@ -47,7 +47,7 @@ defmodule TeslaMate.MixProject do
{:jason, "~> 1.0"},
{:mock, "~> 0.3", only: :test},
{:nimble_csv, "~> 1.1"},
{:phoenix, "~> 1.6.0-rc", override: true},
{:phoenix, "~> 1.6.0"},
{:phoenix_ecto, "~> 4.0"},
{:phoenix_html, "~> 3.0"},
{:phoenix_live_reload, "~> 1.2", only: :dev},
+1 -1
View File
@@ -33,7 +33,7 @@
"nimble_options": {:hex, :nimble_options, "0.3.7", "1e52dd7673d36138b1a5dede183b5d86dff175dc46d104a8e98e396b85b04670", [:mix], [], "hexpm", "2086907e6665c6b6579be54ef5001928df5231f355f71ed258f80a55e9f63633"},
"nimble_pool": {:hex, :nimble_pool, "0.2.4", "1db8e9f8a53d967d595e0b32a17030cdb6c0dc4a451b8ac787bf601d3f7704c3", [:mix], [], "hexpm", "367e8071e137b787764e6a9992ccb57b276dc2282535f767a07d881951ebeac6"},
"parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"},
"phoenix": {:hex, :phoenix, "1.6.0-rc.1", "e47638ecdc87392deef6c37cafa77ed5d4a495751dab173ad6935cb4eb6a8dda", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 1.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "0170b61d669e0743a0dcadd0ef0448f1a8f66b183e9b59788ad2703d853e963d"},
"phoenix": {:hex, :phoenix, "1.6.0", "7b85023f7ddef9a5c70909a51cc37c8b868b474d853f90f4280efd26b0e7cce5", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 1.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "52ffdd31f2daeb399b2e1eb57d468f99a1ad6eee5d8ea19d2353492f06c9fc96"},
"phoenix_ecto": {:hex, :phoenix_ecto, "4.4.0", "0672ed4e4808b3fbed494dded89958e22fb882de47a97634c0b13e7b0b5f7720", [:mix], [{:ecto, "~> 3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "09864e558ed31ee00bd48fcc1d4fc58ae9678c9e81649075431e69dbabb43cc1"},
"phoenix_html": {:hex, :phoenix_html, "3.0.4", "232d41884fe6a9c42d09f48397c175cd6f0d443aaa34c7424da47604201df2e1", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "ce17fd3cf815b2ed874114073e743507704b1f5288bb03c304a77458485efc8b"},
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.3.3", "3a53772a6118d5679bf50fc1670505a290e32a1d195df9e069d8c53ab040c054", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "766796676e5f558dbae5d1bdb066849673e956005e3730dfd5affd7a6da4abac"},
+9 -4
View File
@@ -31,10 +31,15 @@ defmodule TeslaMateWeb.ConnCase do
end
setup tags do
:ok = Ecto.Adapters.SQL.Sandbox.checkout(TeslaMate.Repo)
unless tags[:async] do
Ecto.Adapters.SQL.Sandbox.mode(TeslaMate.Repo, {:shared, self()})
try do
pid = Ecto.Adapters.SQL.Sandbox.start_owner!(TeslaMate.Repo, shared: not tags[:async])
on_exit(fn -> Ecto.Adapters.SQL.Sandbox.stop_owner(pid) end)
rescue
e in [MatchError] ->
case e.term do
{:error, {{:badmatch, :already_shared}, _}} -> :ok
_ -> reraise e, __STACKTRACE__
end
end
# Start the Endpoint manually since tests run with '--no-start'
+8 -6
View File
@@ -26,13 +26,15 @@ defmodule TeslaMate.DataCase do
end
setup tags do
:ok = Ecto.Adapters.SQL.Sandbox.checkout(TeslaMate.Repo)
unless tags[:async] do
Ecto.Adapters.SQL.Sandbox.mode(TeslaMate.Repo, {:shared, self()})
end
pid = Ecto.Adapters.SQL.Sandbox.start_owner!(TeslaMate.Repo, shared: not tags[:async])
on_exit(fn -> Ecto.Adapters.SQL.Sandbox.stop_owner(pid) end)
:ok
rescue
e in [MatchError] ->
case e.term do
{:error, {{:badmatch, :already_shared}, _}} -> :ok
_ -> reraise e, __STACKTRACE__
end
end
@doc """
+148 -136
View File
@@ -3,145 +3,157 @@ defmodule TeslaMate.VehicleCase do
using do
quote do
alias TeslaMate.Vehicles.Vehicle.Summary
alias TeslaMate.Vehicles.Vehicle
alias TeslaMate.Settings.CarSettings
alias TeslaMate.Log.{Car, Update}
alias TeslaApi.Vehicle.State
import Ecto
import Ecto.Changeset
import Ecto.Query
def start_vehicle(name, events, opts \\ []) when length(events) > 0 do
mock_log? = Keyword.get(opts, :log, true)
last = Keyword.get(opts, :last_update, %Update{version: "9999.99.99.0 lasjas234"})
log_name = :"log_#{name}"
api_name = :"api_#{name}"
settings_name = :"settings_#{name}"
locations_name = :"locations_#{name}"
vehicles_name = :"vehicles_#{name}"
pubsub_name = :"pubsub_#{name}"
{:ok, _pid} = start_supervised({LogMock, name: log_name, pid: self(), last_update: last})
{:ok, _pid} = start_supervised({ApiMock, name: api_name, events: events, pid: self()})
{:ok, _pid} = start_supervised({SettingsMock, name: settings_name, pid: self()})
{:ok, _pid} = start_supervised({VehiclesMock, name: vehicles_name, pid: self()})
{:ok, _pid} = start_supervised({PubSubMock, name: pubsub_name, pid: self()})
{:ok, _pid} = start_supervised({LocationsMock, name: locations_name, pid: self()})
opts =
Keyword.put_new_lazy(opts, :car, fn ->
settings =
Keyword.get(opts, :settings, %{})
|> Map.put_new(:req_no_shift_state_reading, false)
|> Map.put_new(:req_no_temp_reading, false)
|> Map.put_new(:req_not_unlocked, true)
%Car{
id: :rand.uniform(65536),
eid: 0,
vid: 1000,
vin: "1000",
model: "3",
settings: struct(CarSettings, settings)
}
end)
deps =
[
name: name,
deps_log: {LogMock, log_name},
deps_api: {ApiMock, api_name},
deps_settings: {SettingsMock, settings_name},
deps_locations: {LocationsMock, locations_name},
deps_vehicles: {VehiclesMock, vehicles_name},
deps_pubsub: {PubSubMock, pubsub_name}
]
|> Enum.filter(fn
{:deps_log, _} -> mock_log?
_ -> true
end)
{:ok, _pid} = start_supervised({Vehicle, Keyword.merge(opts, deps)})
assert_receive {SettingsMock, :subscribe_to_changes}
:ok
end
def online_event(opts \\ []) do
now = DateTime.utc_now() |> DateTime.to_unix(:millisecond)
drive_state =
Keyword.get(opts, :drive_state, %{latitude: 0.0, longitude: 0.0})
|> Map.update(:timestamp, now, fn
nil -> now
ts -> ts
end)
charge_state = Keyword.get(opts, :charge_state, %{timestamp: 0})
climate_state = Keyword.get(opts, :climate_state, %{timestamp: 0})
vehicle_state = Keyword.get(opts, :vehicle_state, %{timestamp: 0, car_version: ""})
vehicle_config = Keyword.get(opts, :vehicle_config, %{timestamp: 0, car_type: "model3"})
%TeslaApi.Vehicle{
state: "online",
display_name: Keyword.get(opts, :display_name),
charge_state: struct(State.Charge, charge_state),
drive_state: struct(State.Drive, drive_state),
climate_state: struct(State.Climate, climate_state),
vehicle_state: struct(State.VehicleState, vehicle_state),
vehicle_config: struct(State.VehicleConfig, vehicle_config)
}
end
def drive_event(ts, shift_state, speed_mph) do
online_event(
drive_state: %{
timestamp: ts,
latitude: 0.1,
longitude: 0.1,
shift_state: shift_state,
speed: speed_mph
}
)
end
def charging_event(ts, charging_state, charge_energy_added, opts \\ []) do
range = Keyword.get(opts, :range)
online_event(
charge_state: %{
timestamp: ts,
charging_state: charging_state,
charge_energy_added: charge_energy_added,
ideal_battery_range: range,
battery_range: range
},
drive_state: %{timestamp: ts, latitude: 0.0, longitude: 0.0}
)
end
defp update_event(ts, state, car_version, opts \\ []) do
alias TeslaApi.Vehicle.State.VehicleState.SoftwareUpdate
update_version = Keyword.get(opts, :update_version)
online_event(
vehicle_state: %{
timestamp: ts,
car_version: car_version,
software_update: %SoftwareUpdate{
expected_duration_sec: 2700,
status: state,
version: update_version
}
},
drive_state: %{timestamp: ts, latitude: 0.0, longitude: 0.0}
)
end
import TeslaMate.VehicleCase
end
end
setup tags do
pid = Ecto.Adapters.SQL.Sandbox.start_owner!(TeslaMate.Repo, shared: not tags[:async])
on_exit(fn -> Ecto.Adapters.SQL.Sandbox.stop_owner(pid) end)
:ok
rescue
e in [MatchError] ->
case e.term do
{:error, {{:badmatch, :already_shared}, _}} -> :ok
_ -> reraise e, __STACKTRACE__
end
end
alias TeslaMate.Vehicles.Vehicle
alias TeslaMate.Settings.CarSettings
alias TeslaMate.Log.{Car, Update}
alias TeslaApi.Vehicle.State
def start_vehicle(name, events, opts \\ []) when length(events) > 0 do
mock_log? = Keyword.get(opts, :log, true)
last = Keyword.get(opts, :last_update, %Update{version: "9999.99.99.0 lasjas234"})
log_name = :"log_#{name}"
api_name = :"api_#{name}"
settings_name = :"settings_#{name}"
locations_name = :"locations_#{name}"
vehicles_name = :"vehicles_#{name}"
pubsub_name = :"pubsub_#{name}"
{:ok, _pid} = start_supervised({LogMock, name: log_name, pid: self(), last_update: last})
{:ok, _pid} = start_supervised({ApiMock, name: api_name, events: events, pid: self()})
{:ok, _pid} = start_supervised({SettingsMock, name: settings_name, pid: self()})
{:ok, _pid} = start_supervised({VehiclesMock, name: vehicles_name, pid: self()})
{:ok, _pid} = start_supervised({PubSubMock, name: pubsub_name, pid: self()})
{:ok, _pid} = start_supervised({LocationsMock, name: locations_name, pid: self()})
opts =
Keyword.put_new_lazy(opts, :car, fn ->
settings =
Keyword.get(opts, :settings, %{})
|> Map.put_new(:req_no_shift_state_reading, false)
|> Map.put_new(:req_no_temp_reading, false)
|> Map.put_new(:req_not_unlocked, true)
%Car{
id: :rand.uniform(65536),
eid: 0,
vid: 1000,
vin: "1000",
model: "3",
settings: struct(CarSettings, settings)
}
end)
deps =
[
name: name,
deps_log: {LogMock, log_name},
deps_api: {ApiMock, api_name},
deps_settings: {SettingsMock, settings_name},
deps_locations: {LocationsMock, locations_name},
deps_vehicles: {VehiclesMock, vehicles_name},
deps_pubsub: {PubSubMock, pubsub_name}
]
|> Enum.filter(fn
{:deps_log, _} -> mock_log?
_ -> true
end)
{:ok, _pid} = start_supervised({Vehicle, Keyword.merge(opts, deps)})
assert_receive {SettingsMock, :subscribe_to_changes}
:ok
end
def online_event(opts \\ []) do
now = DateTime.utc_now() |> DateTime.to_unix(:millisecond)
drive_state =
Keyword.get(opts, :drive_state, %{latitude: 0.0, longitude: 0.0})
|> Map.update(:timestamp, now, fn
nil -> now
ts -> ts
end)
charge_state = Keyword.get(opts, :charge_state, %{timestamp: 0})
climate_state = Keyword.get(opts, :climate_state, %{timestamp: 0})
vehicle_state = Keyword.get(opts, :vehicle_state, %{timestamp: 0, car_version: ""})
vehicle_config = Keyword.get(opts, :vehicle_config, %{timestamp: 0, car_type: "model3"})
%TeslaApi.Vehicle{
state: "online",
display_name: Keyword.get(opts, :display_name),
charge_state: struct(State.Charge, charge_state),
drive_state: struct(State.Drive, drive_state),
climate_state: struct(State.Climate, climate_state),
vehicle_state: struct(State.VehicleState, vehicle_state),
vehicle_config: struct(State.VehicleConfig, vehicle_config)
}
end
def drive_event(ts, shift_state, speed_mph) do
online_event(
drive_state: %{
timestamp: ts,
latitude: 0.1,
longitude: 0.1,
shift_state: shift_state,
speed: speed_mph
}
)
end
def charging_event(ts, charging_state, charge_energy_added, opts \\ []) do
range = Keyword.get(opts, :range)
online_event(
charge_state: %{
timestamp: ts,
charging_state: charging_state,
charge_energy_added: charge_energy_added,
ideal_battery_range: range,
battery_range: range
},
drive_state: %{timestamp: ts, latitude: 0.0, longitude: 0.0}
)
end
def update_event(ts, state, car_version, opts \\ []) do
alias TeslaApi.Vehicle.State.VehicleState.SoftwareUpdate
update_version = Keyword.get(opts, :update_version)
online_event(
vehicle_state: %{
timestamp: ts,
car_version: car_version,
software_update: %SoftwareUpdate{
expected_duration_sec: 2700,
status: state,
version: update_version
}
},
drive_state: %{timestamp: ts, latitude: 0.0, longitude: 0.0}
)
end
end
+21 -16
View File
@@ -481,30 +481,35 @@ defmodule TeslaMate.ImportTest do
assert :ok = Import.run("Europe/Berlin")
assert_receive %Status{
files: [%{complete: false}, %{complete: false}, %{complete: false}],
state: :running
}
files: [%{complete: false}, %{complete: false}, %{complete: false}],
state: :running
},
1000
assert_receive %Status{
files: [%{complete: false}, %{complete: false}, %{complete: false}],
state: :running
}
files: [%{complete: false}, %{complete: false}, %{complete: false}],
state: :running
},
1000
assert_receive %Status{
files: [%{complete: true}, %{complete: false}, %{complete: false}],
state: :running
}
files: [%{complete: true}, %{complete: false}, %{complete: false}],
state: :running
},
1000
assert_receive %Status{
files: [%{complete: true}, %{complete: true}, %{complete: false}],
state: :running
}
files: [%{complete: true}, %{complete: true}, %{complete: false}],
state: :running
},
1000
assert_receive %Status{
files: [%{complete: true}, %{complete: true}, %{complete: false}],
state: :error,
message: msg
}
files: [%{complete: true}, %{complete: true}, %{complete: false}],
state: :error,
message: msg
},
1000
assert {{:badmatch,
{:error,
@@ -1,6 +1,5 @@
defmodule TeslaMate.Vehicles.Vehicle.IdentificationTest do
use TeslaMate.VehicleCase, async: false
use TeslaMateWeb.ConnCase
alias TeslaMate.Log.Car
alias TeslaMate.Log
@@ -1,9 +1,9 @@
defmodule TeslaMate.Vehicles.Vehicle.ChargingSyncTest do
use TeslaMate.DataCase
use TeslaMate.VehicleCase
use TeslaMate.VehicleCase, async: false
import ExUnit.CaptureLog
alias TeslaMate.Vehicles.Vehicle.Summary
alias TeslaMate.Log
@log_opts format: "[$level] $message\n",
@@ -1,6 +1,7 @@
defmodule TeslaMate.Vehicles.Vehicle.ChargingTest do
use TeslaMate.VehicleCase, async: true
alias TeslaMate.Vehicles.Vehicle.Summary
alias TeslaMate.Log.ChargingProcess
import ExUnit.CaptureLog
@@ -1,7 +1,8 @@
defmodule TeslaMate.Vehicles.Vehicle.DrivingTest do
use TeslaMate.VehicleCase, async: true
alias TeslaMate.Log.{Drive, Car}
alias TeslaMate.Vehicles.Vehicle.Summary
alias TeslaMate.Log.Drive
test "logs a full drive", %{test: name} do
now = DateTime.utc_now()
@@ -1,10 +1,10 @@
defmodule TeslaMate.Vehicles.Vehicle.StreamingTest do
use TeslaMate.VehicleCase, async: true
use TeslaMate.DataCase, async: true
import ExUnit.CaptureLog
alias TeslaMate.Log.Car
alias TeslaMate.Vehicles.Vehicle.Summary
alias TeslaMate.Vehicles.Vehicle
alias TeslaApi.Stream
defp stream(name, data) do
@@ -1,8 +1,7 @@
defmodule TeslaMate.Vehicles.Vehicle.SuspendLoggingTest do
use TeslaMate.VehicleCase, async: true
alias TeslaMate.Vehicles.Vehicle
alias TeslaMate.Vehicles.Vehicle.Summary
alias TeslaMate.Vehicles.Vehicle
test "immediately returns :ok if asleep", %{test: name} do
@@ -1,7 +1,7 @@
defmodule TeslaMate.Vehicles.Vehicle.SuspendTest do
use TeslaMate.VehicleCase, async: true
alias TeslaMate.Vehicles.Vehicle
alias TeslaMate.Vehicles.Vehicle.Summary
test "suspends when idling", %{test: name} do
now_ts = DateTime.utc_now() |> DateTime.to_unix(:millisecond)
@@ -1,6 +1,8 @@
defmodule TeslaMate.Vehicles.Vehicle.UpdatingTest do
use TeslaMate.VehicleCase, async: true
alias TeslaMate.Vehicles.Vehicle.Summary
@tag :capture_log
test "logs an update cycle", %{test: name} do
now = DateTime.utc_now()
@@ -1,8 +1,8 @@
defmodule TeslaMate.Vehicles.VehicleSyncTest do
use TeslaMate.DataCase
use TeslaMate.VehicleCase
use TeslaMate.VehicleCase, async: false
describe "Summary" do
alias TeslaMate.Vehicles.Vehicle.Summary
alias TeslaMate.Mqtt.PubSub.VehicleSubscriber
alias TeslaMate.Log.Car
alias TeslaMate.Log
+7 -3
View File
@@ -1,6 +1,10 @@
defmodule TeslaMate.Vehicles.VehicleTest do
use TeslaMate.VehicleCase, async: true
alias TeslaMate.Vehicles.Vehicle.Summary
alias TeslaMate.Vehicles.Vehicle
alias TeslaMate.Log.{Car, Update}
describe "starting" do
@tag :capture_log
test "handles unknown and faulty states", %{test: name} do
@@ -340,7 +344,7 @@ defmodule TeslaMate.Vehicles.VehicleTest do
fuse_name =
TestHelper.eventually(
fn ->
assert %Vehicle.Summary{state: :asleep, healthy: true, car: %Car{id: id}} =
assert %Summary{state: :asleep, healthy: true, car: %Car{id: id}} =
Vehicle.summary(name)
:"#{Vehicle}_#{id}_api_error"
@@ -373,7 +377,7 @@ defmodule TeslaMate.Vehicles.VehicleTest do
:ok = start_vehicle(name, events)
for _ <- 1..10 do
assert %Vehicle.Summary{state: :unavailable, healthy: true} = Vehicle.summary(name)
assert %Summary{state: :unavailable, healthy: true} = Vehicle.summary(name)
end
end
@@ -393,7 +397,7 @@ defmodule TeslaMate.Vehicles.VehicleTest do
assert_receive {ApiMock, {:stream, 1000, _}}
for _ <- 1..10 do
assert %Vehicle.Summary{state: :online, healthy: true} = Vehicle.summary(name)
assert %Summary{state: :online, healthy: true} = Vehicle.summary(name)
end
end
end
+4 -2
View File
@@ -2,6 +2,7 @@ defmodule TeslaMate.VehiclesTest do
use TeslaMate.VehicleCase
use TeslaMate.DataCase
alias TeslaMate.Vehicles.Vehicle
alias TeslaMate.Vehicles
@tag :capture_log
@@ -68,7 +69,7 @@ defmodule TeslaMate.VehiclesTest do
{:ok, _pid} = start_supervised({Vehicles, vehicle: VehicleMock})
assert true = Vehicles.Vehicle.healthy?(id)
assert true = Vehicle.healthy?(id)
end
end
@@ -87,12 +88,13 @@ defmodule TeslaMate.VehiclesTest do
start_supervised!({Vehicles, vehicle: VehicleMock})
assert true = Vehicles.Vehicle.healthy?(id)
assert true = Vehicle.healthy?(id)
end
end
end
describe "car settings" do
alias TeslaMate.Settings.CarSettings
alias TeslaApi.Vehicle.State.VehicleConfig
alias TeslaMate.{Log, Repo}
alias TeslaMate.Vehicles.Vehicle.Summary
@@ -2,7 +2,6 @@ defmodule TeslaMateWeb.CarLive.Indextest do
use TeslaMateWeb.ConnCase
use TeslaMate.VehicleCase
alias TeslaApi.Vehicle.State.VehicleState.SoftwareUpdate
alias TeslaMate.Settings.GlobalSettings
alias TeslaMate.Settings
@@ -1,9 +1,8 @@
defmodule TeslaMateWeb.ChargeLive.CostTest do
use TeslaMateWeb.ConnCase
use TeslaMate.VehicleCase
use TeslaMateWeb.ConnCase, async: false
use TeslaMate.VehicleCase, async: false
alias TeslaMate.Log.ChargingProcess
alias TeslaMate.Log.Car
alias TeslaMate.{Log, Locations, Repo}
import TestHelper, only: [decimal: 1]