Creating a Super Admin Voter
…fixtures, so over in the terminal, reload them with:
symfony console foundry:load-fixtures
Now create our custom voter:
symfony console make:voter
Call it SuperAdminVoter.
Jump back to the IDE and find it: src/Security/Voter/SuperAdminVoter.php. Clear
everything out - the constants, supports…
Relating Resources
…new owner field to getDefaults() set to UserFactory::new().
I'm not going to go into the specifics of Foundry - and Foundry has great docs
on how to work with relationships - but this will create a new User each time
it creates a new DragonTreasure…
Creating a User Entity
…migrate
Sweet! Though, I think our new entity deserves some juicy data fixtures. Let's
use Foundry like we did for DragonTreasure. Start by running
php bin/console make:factory
to generate the factory for User.
Like before, in the src/Factory/ directory, we have…
Doctrine Inheritance and Relationships
… starshipParts is good. We don't need another property
so just hit enter to exit.
Next, create the Foundry factory for this entity.
symfony console make:factory
1 for all (and all for 1). Sweet, let's take a look at the generated code.
In…
Resetting the Database
…log file instead:
logFile=var/log/deprecations.log.
Close that up. Now when we run the tests:
Clean and tidy! And the deprecations are still waiting for us in the log file.
Next: let's leverage Foundry Factories to make seeding our database an absolute
delight!
Single Table Inheritance
…because not all entities will have those properties, and need to be null
if this is the case.
Let's reload our fixtures! Run:
symfony console foundry:load-fixtures
Awesome, no changes needed for our fixtures.
To see what our starship table looks like, run:
…
Class Table Inheritance
…cargo_capacity.
The starship table has all the common properties, and the scout table has just an id
and sensor_range.
Let's load our fixtures to ensure everything still works.
symfony console foundry:load-fixtures
Looks good. Jump over to the app and refresh…
The Repository Test Helper
…Foundry comes with a nice
trick for this.
After we call the method, say LockDownFactory. Normally, we would call things like
create or createMany, but this also has a method on it named repository.
This returns an object from Foundry that wraps the repository - much…
Translatable Mapping
…when we switch to French on our site, we'll display
some mock French data, just like we currently have mock English data.
We need to create a factory using Foundry. So, run:
symfony console make:factory
Create a factory for the Translation entity: 0…
Emails Assertions in Functional Tests
…before, this
may look a tad different because I'm using some rocking helper libraries. zenstruck/foundry gives
us this ResetDatabase trait which wipes the database before each test. It also
gives us this Factories trait which lets us create database fixtures
in our tests…
Generating the API Token & Fixtures
… So let's add some API tokens to the database. At your
terminal, run
php ./bin/console make:factory
so we can generate a Foundry factory for ApiToken. Go check out the new class:
src/Factory/ApiTokenFactory.php. Down in getDefaults():
This looks mostly fine…
JSON Test Assertions & Seeding the Database
…the database is empty. To make our test real, we need data: we
need to seed the database with data at the start of the test.
Fortunately, Foundry makes that dead-simple. At the top, call
DragonTreasureFactory::createMany() and let's create 5 treasures. Now…
Simple Doctrine Data Fixtures
…stuff.
But for developing, I want a really rich set of data fixtures, like... maybe 25
mixes. We could add those by hand here... or even create a loop. But there's a
better way, via a library called "Foundry". Let's explore it next!
Writing an Integrational Test for Webhooks
…the test environment.
Our test is failing because we need to set up a test database. We
could do this manually using Doctrine console commands, but let's take
advantage of Zenstruck Foundry, which we already have installed.
In the test class, add use ResetDatabase…
Hashing Plain Passwords & PasswordCredentials
…property... but then the password property
would stay null... and it would explode in the database because that column is
required.
So after Foundry has finished instantiating the object, we need to run some extra
code that reads the plainPassword and hashes it. We can…
Customizing the User Class
…users to our database using the fixtures system.
Open up src/DataFixtures/AppFixtures.php. We're using Foundry to help us load
data. So let's create a new Foundry factory for User. Since we're having SO much
fun running commands in this video…
Saving Items in a ManyToMany Relation
…they are not related to any questions in the database because we never set
the owning side of the relationship. So... let's put that code back.
Next: let's use Foundry to create a bunch of Tag objects and randomly relate them
to questions.
Publishing a Listing
…for the JSON body, send isPublished
set to true:
And... the status code we expect is 200:
So here's the flow: we create a User - via the Foundry library - and then
create a CheeseListing. Oh, but we don't want that published() method: that…
App & Test Setup
…to use Symfony 5.1 and
API platform 2.5:
I also added Foundry to our system, which
is a new library that makes it really easy to create dummy data:
We're using Foundry inside of our data fixtures - so src/DataFixtures/AppFixtures.php -…
Creating the User Class
…explore a registration form
later, but for now, let's use a Foundry factory for local development.
Create the factory with:
symfony console make:factory
Select our User entity.
Open src/Factory/UserFactory.php. I think we can improve these defaults a bit!
For email…
x
196