99 lines
2.7 KiB
Elixir
99 lines
2.7 KiB
Elixir
defmodule MessageServer.StorageTest do
|
|
use ExUnit.Case
|
|
|
|
alias MessageServer.Storage
|
|
|
|
@test_server_id "1"
|
|
@test_storage_dir "storage/server_#{@test_server_id}"
|
|
|
|
setup do
|
|
pid = start_supervised!({Storage, {@test_server_id, :test_storage}})
|
|
|
|
on_exit(fn ->
|
|
File.rm_rf!(@test_storage_dir)
|
|
end)
|
|
|
|
%{storage: pid, storage_dir: @test_storage_dir}
|
|
end
|
|
|
|
test "creates storage directory on startup", %{storage_dir: storage_dir} do
|
|
assert File.exists?(storage_dir)
|
|
assert File.dir?(storage_dir)
|
|
end
|
|
|
|
test "appends message to user file", %{storage_dir: storage_dir} do
|
|
user_id = "zoidberg"
|
|
from_user = "bender"
|
|
message = "let's go steal some stuff"
|
|
|
|
assert :ok = Storage.append_message(user_id, from_user, message)
|
|
|
|
file_path = Path.join(storage_dir, "#{user_id}.txt")
|
|
assert File.exists?(file_path)
|
|
|
|
content = File.read!(file_path)
|
|
assert content == "#{from_user}: #{message}\n"
|
|
end
|
|
|
|
test "appends multiple messages to same user file", %{storage_dir: storage_dir} do
|
|
user_id = "leela"
|
|
|
|
assert :ok = MessageServer.Storage.append_message(user_id, "fry", "i love you leela")
|
|
|
|
assert :ok =
|
|
MessageServer.Storage.append_message(
|
|
user_id,
|
|
"bender",
|
|
"bite my shiny metal ass!"
|
|
)
|
|
|
|
file_path = Path.join(storage_dir, "#{user_id}.txt")
|
|
content = File.read!(file_path)
|
|
|
|
expected_content = """
|
|
fry: i love you leela
|
|
bender: bite my shiny metal ass!
|
|
"""
|
|
|
|
assert content == expected_content
|
|
end
|
|
|
|
test "creates separate files for different users", %{storage_dir: storage_dir} do
|
|
assert :ok =
|
|
MessageServer.Storage.append_message(
|
|
"fry",
|
|
"professor",
|
|
"good news everyone!"
|
|
)
|
|
|
|
assert :ok =
|
|
MessageServer.Storage.append_message(
|
|
"nibbler",
|
|
"zoidberg",
|
|
"hooray! people are paying attention to me!"
|
|
)
|
|
|
|
fry_file = Path.join(storage_dir, "fry.txt")
|
|
nibbler_file = Path.join(storage_dir, "nibbler.txt")
|
|
|
|
assert File.exists?(fry_file)
|
|
assert File.exists?(nibbler_file)
|
|
|
|
assert File.read!(fry_file) == "professor: good news everyone!\n"
|
|
assert File.read!(nibbler_file) == "zoidberg: hooray! people are paying attention to me!\n"
|
|
end
|
|
|
|
test "handles messages with special characters", %{storage_dir: storage_dir} do
|
|
user_id = "zapp"
|
|
from_user = "zoidberg"
|
|
message = "why not zoidberg? 🦀 (╯°□°)╯︵ ┻━┻"
|
|
|
|
assert :ok = MessageServer.Storage.append_message(user_id, from_user, message)
|
|
|
|
file_path = Path.join(storage_dir, "#{user_id}.txt")
|
|
content = File.read!(file_path)
|
|
|
|
assert content == "#{from_user}: #{message}\n"
|
|
end
|
|
end
|