100 lines
2.8 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
IO.puts(storage_dir)
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