Compare commits

...
4 Commits
Author SHA1 Message Date
KKlochko e89a8ea5db Update Links.create_one to use a function.
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build was killed
2023-08-04 21:10:36 +03:00
KKlochko feebbe4f8a Add a generator for Link with random shorten. 2023-08-04 21:10:08 +03:00
KKlochko ecdce9e407 Add the test config.
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build was killed
2023-08-03 14:36:07 +03:00
KKlochko e3b202825b Add the CI/CD configuration. 2023-08-03 14:35:14 +03:00
5 changed files with 105 additions and 4 deletions
+52
View File
@@ -0,0 +1,52 @@
kind: pipeline
type: docker
name: default
environment:
DATABASE_NAME: link_shortener_dev
DATABASE_USERNAME: postgres
DATABASE_PASSWORD: postgres
DATABASE_HOST: postgres
DATABASE_PORT: 5432
SECRET_KEY_BASE: TestSecretKeycRZ1H45gfdAsdf8DIb45df4664mRCruzwVEF68wosddfg324ost
steps:
- name: install dependencies
image: elixir:1.14.0-slim
volumes:
- name: mix
path: /root/.mix
commands:
- mix local.hex --force
- mix local.rebar --force
- mix deps.get
- mix compile
- name: run migrations
image: elixir:1.14.0-slim
volumes:
- name: mix
path: /root/.mix
commands:
- mix ecto.setup
- name: run tests
image: elixir:1.14.0-slim
volumes:
- name: mix
path: /root/.mix
commands:
- mix test
volumes:
- name: mix
temp: {}
services:
- name: postgres
image: postgres:15-alpine
environment:
POSTGRES_DB: link_shortener_dev
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
+6
View File
@@ -40,4 +40,10 @@
Refactor the Links module. Refactor the Links module.
** 0.4.9 <2023-08-02 Wed> ** 0.4.9 <2023-08-02 Wed>
Add tests for the Links module. Add tests for the Links module.
** 0.4.10 <2023-08-03 Thu>
Add the CI/CD configuration.
Add the test config.
** 0.5.1 <2023-08-04 Fri>
Add a generator for Link with random shorten.
Update Links.create_one to use a function.
+30
View File
@@ -0,0 +1,30 @@
import Config
# Configure your database
#
# The MIX_TEST_PARTITION environment variable can be used
# to provide built-in test partitioning in CI environment.
# Run `mix help test` for more information.
config :link_shortener, LinkShortener.Repo,
username: System.get_env("DATABASE_USERNAME"),
password: System.get_env("DATABASE_PASSWORD"),
hostname: System.get_env("DATABASE_HOST"),
database: "link_shortener_test#{System.get_env("MIX_TEST_PARTITION")}",
pool: Ecto.Adapters.SQL.Sandbox,
pool_size: 10
# We don't run a server during test. If one is required,
# you can enable the server option below.
config :link_shortener, LinkShortenerWeb.Endpoint,
http: [ip: {127, 0, 0, 1}, port: 4002],
secret_key_base: System.get_env("SECRET_KEY_BASE"),
server: false
# In test we don't send emails.
config :link_shortener, LinkShortener.Mailer, adapter: Swoosh.Adapters.Test
# Print only warnings and errors during test
config :logger, level: :warn
# Initialize plugs at runtime for faster test compilation
config :phoenix, :plug_init_mode, :runtime
@@ -0,0 +1,14 @@
defmodule LinkShortener.Generators.LinkWithRandomShorten do
@moduledoc """
This module provides a generator for Link.
"""
alias LinkShortener.Generators.SafeString
@doc """
Generate a Link with random shorten with the length.
"""
def generate_one(attrs, length \\ 10, generator \\ &SafeString.generate/1) do
Map.put(attrs, :shorten, generator.(length))
end
end
+3 -4
View File
@@ -4,13 +4,12 @@ defmodule LinkShortener.Links do
import Ecto.Query import Ecto.Query
alias LinkShortener.Repo alias LinkShortener.Repo
alias LinkShortener.Links.Link alias LinkShortener.Links.Link
alias LinkShortener.Generators.SafeString alias LinkShortener.Generators.LinkWithRandomShorten, as: LinkGenerator
def new_one(), do: Link.changeset(%Link{}, %{}) def new_one(), do: Link.changeset(%Link{}, %{})
def create_one(attrs, length \\ 10, generator \\ SafeString) do def create_one(attrs, length \\ 10, generator \\ &LinkGenerator.generate_one/2) do
shorten = generator.generate(length) generator.(attrs, length)
Map.put(attrs, :shorten, shorten)
|> insert_one() |> insert_one()
end end