NAME
RedFactory - A factory for testing code using Red
SYNOPSIS
# Your DB schema ---------------------------------------------------------
use Red;
model Post {...}
model Person {
has UInt $.id is serial;
has Str $.first-name is column;
has Str $.last-name is column;
has Str $.email is column;
has Instant $.disabled-at is column{ :nullable };
has Post @.posts is relationship(*.author-id, :model(Post));
}
model Post {
has UInt $.id is serial;
has Str $.title is column;
has Str $.body is column;
has UInt $!author-id is referencing(*.id, :model(Person));
has Person $.author is relationship(*.author-id, :model(Person));
has Instant $.created-at is column = now;
}
# Your factory configuration ---------------------------------------------
use RedFactory;
factory "person", :model(Person), {
.first-name = "john";
.last-name = "doe";
.email = -> $_, :$number = .counter-by-model {
"{ .first-name }{ $number }@domain.com"
}
.posts = -> :$num-of-posts = 0 {
factory-args $num-of-posts, "post"
}
trait "disabled", {
.disabled-at = now
}
}
factory "post", :model(Post), {
.title = {
"Post title { .counter-by-model }"
}
.body = -> $_, :$title-repetition = 3 {
(.title ~ "\n") x $title-repetition
}
}
# Testing your imaginary controller helper -------------------------------
use Test;
my $*RED-DB = factory-db;
my &get-recent-author's-posts'-titles =
get-controller's-help("get-recent-author's-posts'-titles");
# Create the needed person with posts
my $author = factory-create "person", :PARS{ :10num-of-posts };
my @posts = get-recent-author's-posts'-titles $author.id, 3;
is-deeply @posts, ["Post title 10", "Post title 9", "Post title 8"];
DESCRIPTION
RedFactory is a easier way of testing code that uses Red
AUTHOR
<fernandocorrea@gmail.com>
COPYRIGHT AND LICENSE
Copyright 2021
This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.