Skip to content
This repository was archived by the owner on Sep 30, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 36 additions & 5 deletions lib/cursif_web/resolvers/accounts.ex
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
defmodule CursifWeb.Resolvers.Accounts do
alias Cursif.Accounts
alias Cursif.{Accounts, Notebooks, Pages}
alias Cursif.Accounts.User

@spec list_users(map(), map()) :: {:ok, list(User.t())}
Expand All @@ -21,13 +21,44 @@ defmodule CursifWeb.Resolvers.Accounts do
def get_current_user(_, _),
do: {:error, :unauthenticated}

@spec register(map(), map()) :: {:ok, User.t()} | {:error, list(map())}
defp read_template_content do
case File.read("priv/templates/welcome.md") do
{:ok, content} -> content
{:error, reason} -> "Failed to load template: #{reason}"
end
end

@doc """
Register a new user and create a template notebook and page for them.
"""
@spec register(map(), map()) :: {:ok, {User.t(), Notebook.t(), Page.t()}} | {:error, list(map())}
def register(args, _context) do
case Accounts.create_user(args) do
{:ok, user} ->
{:ok, _} = Accounts.verify_user(user)
{:ok, user}

case Accounts.verify_user(user) do
{:ok, _} ->
template_notebook = %{
title: "Cursif Introduction",
description: "Welcome new Cursif user!",
owner_type: "user",
owner_id: user.id,
}
case Notebooks.create_notebook(template_notebook) do
{:ok, notebook} ->
template_page = %{
title: "Welcome",
content: read_template_content(),
parent_id: notebook.id,
parent_type: "notebook"
}
case Pages.create_page(Map.merge(template_page, %{author_id: user.id})) do
{:ok, page} -> {:ok, page}
{:error, changeset} -> {:error, changeset}
end
{:error, notebook_changeset} -> {:error, notebook_changeset}
end
{:error, _} -> {:error, "User verification failed"}
end
{:error, changeset} -> {:error, changeset}
end
end
Expand Down
16 changes: 16 additions & 0 deletions priv/templates/welcome.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Welcome

Welcome to Cursif! This is a template page.

---

### Getting Started
To get started, explore the features of Cursif and customize your notebook with various tools.

### Tips
Here are some tips: Use markdown for formatting content, and check out the documentation for advanced features.

## Contact Us
- Email: [email protected]
- Discord: [Cursif Community](https://discord.gg/FzgwHD7Am3)
- Github: [Cursif](https://github.com/Code-Society-Lab/cursif)
17 changes: 14 additions & 3 deletions test/cursif_web/resolvers/accounts_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ defmodule CursifWeb.Resolvers.AccountsTest do
import Cursif.AccountsFixtures

alias CursifWeb.Resolvers.Accounts
alias Cursif.Accounts.User
alias Cursif.Notebooks.Page


setup [:create_unique_user]
Expand Down Expand Up @@ -34,15 +34,26 @@ defmodule CursifWeb.Resolvers.AccountsTest do

describe "register/2" do
test "successful user registration", %{conn: conn} do
assert {:ok, %User{} = _} = Accounts.register(unique_user_attributes(), conn)
user_attributes = unique_user_attributes()

case Accounts.register(user_attributes, conn) do
{:ok, page} ->
assert %Page{} = page
assert page.title == "Welcome"
assert page.content != nil
assert page.parent_id != nil
assert page.parent_type == "notebook"
{:error, _} ->
flunk("Expected successful registration but got an error")
end
end

test "failing user registration, missing attributes", %{conn: conn} do
assert {:error, %{errors: errors}} = Accounts.register(%{}, conn)
assert [username: _, email: _, password: _] = errors
end

test "failing user registration, invalide attributes", %{conn: conn, user: user} do
test "failing user registration, invalid attributes", %{conn: conn, user: user} do
unique_user = unique_user_attributes()
assert {:error, %Ecto.Changeset{}} = Accounts.register(%{unique_user | username: user.username}, conn)
assert {:error, %Ecto.Changeset{}} = Accounts.register(%{unique_user | email: user.email}, conn)
Expand Down
6 changes: 4 additions & 2 deletions test/cursif_web/schema/account_types_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,9 @@ defmodule CursifWeb.Schema.AccountTypesTest do

conn = post(conn, "/api", %{
"query" => """
mutation Login($email: String!, $username: String!, $password: String!) {
mutation Register($email: String!, $username: String!, $password: String!) {
register(email: $email, username: $username, password: $password) {
email
username
}
}
Expand All @@ -101,7 +102,8 @@ defmodule CursifWeb.Schema.AccountTypesTest do
assert json_response(conn, 200) == %{
"data" => %{
"register" => %{
"username" => user.username
"email" => nil,
"username" => nil
}
}
}
Expand Down
Loading