[ANN] fixgen 0.1.0 - a CLI tool for generating fixtures

Heya everyone!

This weekend I had some fun and built a fixture generator in OCaml! It is my very first DSL.

I found it very time consuming to set up test data, especially when dealing with relational data, where some data generated needs to reference some other data. Therefore, I wanted a slim DSL that can be used to quickly generate test data which I can import it into SQL or NoSQL.

So to give an example:

~: fixgen 'user (2): id uuidv4, name name; order (5): id uuidv4, buyer user.id, amount int(1,40), currency ("USD","MXN")'

FILE NAME: user
name,id
Ivan,1aa2f650-95b2-477a-9ccf-88c46d927e4e
Judy,0bb7258f-8843-4997-97a8-08351623a9d1


FILE NAME: order
currency,amount,buyer,id
USD,14,1aa2f650-95b2-477a-9ccf-88c46d927e4e,42362e8d-2c22-443a-8851-62e9b2cd18cf
MXN,19,0bb7258f-8843-4997-97a8-08351623a9d1,ebccf8db-de5b-4744-bd99-7e299fb3107a
MXN,17,1aa2f650-95b2-477a-9ccf-88c46d927e4e,b23ee86d-d69e-4270-9156-944277a46ea1
MXN,32,1aa2f650-95b2-477a-9ccf-88c46d927e4e,cc9d05c2-4921-415d-820e-4713aefd5593
USD,29,1aa2f650-95b2-477a-9ccf-88c46d927e4e,921738da-b0e3-4d50-ac7e-d243805ecfe8

It can also export to JSON!

~: fixgen 'user (2): id uuidv4, name name; purchase (5): id uuidv4, buyer user.id, amount int(1,40), currency ("USD","MXN")' -f json

FILE NAME: user
[{"name": "Ivan", "id": "f6c90f96-faad-4741-a52b-6d53b94d48f3"}, {"name": "Judy", "id": "57eccc5c-ad09-4229-b0c7-a828280dba1b"}]

FILE NAME: purchase
[{"currency": "USD", "amount": 14, "buyer": "f6c90f96-faad-4741-a52b-6d53b94d48f3", "id": "8e59075c-1a6a-4093-86ca-e1135afd34f3"}, {"currency": "MXN", "amount": 19, "buyer": "57eccc5c-ad09-4229-b0c7-a828280dba1b", "id": "fd89ad30-af07-4c9d-9ec4-ade7583e9cf0"}, {"currency": "MXN", "amount": 17, "buyer": "f6c90f96-faad-4741-a52b-6d53b94d48f3", "id": "b15cd3d7-ede1-4612-b0f2-a36cc1a73f1c"}, {"currency": "MXN", "amount": 32, "buyer": "f6c90f96-faad-4741-a52b-6d53b94d48f3", "id": "295a85b8-42d9-49a4-8ce6-e4d7b1a94ea9"}, {"currency": "USD", "amount": 29, "buyer": "f6c90f96-faad-4741-a52b-6d53b94d48f3", "id": "925eff95-b7a2-4cbe-93b9-b519372a16cf"}]

For now it doesn’t have many generators (I plan to add more), the docs are a bit sparse and I don’t know if I shared the compiled binary correctly. However, I wanted to share it early to gather feedback!

11 Likes

Nice. Always good to have this kind of tools. Thanks for sharing.

maybe a mirror on github might be useful for some more visibility of your project