Basic Server Functionality oooooooooooooooo ooooooooo ooooooo ooo ooo ooooooo ooo oooooo ooo oooooooooooooooo ooooooo ooooooo oooo ooo oooooooo ooo oooooooo ooo ooo ooo ooo ooo oooo ooo ooo ooo ooo ooo ooo oooooo oooooo ooo oooooo oooooooo ooo ooo ooo ooo oo ooo oooooo oooooo ooo oooooo oo ooooo ooo ooo ooo ooo oooo ooo oooooo oooooo ooo ooo oo oooo ooo ooo ooo ooo ooo ooo oooooo ooo  ooo ooo oo oooo ooo ooo ooo oooo ooo ooo oooooo ooo  ooo ooooooo oo ooo ooooooo ooo oooooo ooo info: Obsidian Server version: 1.0.0 info: Loading environment... info: Loading resources... info: ==> Loaded service metadata (`test` version 0.0.1) info: ==> Loaded resource `simpleTestResource` info: ==> Loaded resource `intermediateTestResource` info: ==> Loaded resource `relationshipTestResourceA` info: ==> Loaded resource `relationshipTestResourceB` info: ==> Loaded resource `relationshipTestResourceC` info: ==> Loaded resource `userTestResourceA` info: ==> Loaded resource `userTestResourceB` info: ==> Loaded resource `userTestResourceC` info: ==> Loaded resource `customTestResource` info: Detected single-database environment. info: Configuring adapter `primary` with options: type=file options={ directory=./db/ } info: ==> Detected `file` database for adapter `primary` info: Starting server... info: Started server with options: host=0.0.0.0 port=8000 http: 401 * / (64d2980a-f83a-56ea-a488-b417e8bf9341) ✓ 401 if no credentials are passed http: 401 * / (94a61248-cc88-5c89-b4c8-136d8610f95a) ✓ 401 if wrong credentials are passed http: 404 * / (f888ed88-524f-5619-89c9-2a4ec50a5bf4) ✓ 404 if no path is passed http: 404 * /fasdjfaksdfljaksdf (9d730994-91bf-586f-a4ab-e9d25256cb7c) ✓ 404 if a nonexistent is passed http: 200 GET /_metadata (5775e436-d2a0-52ae-bb1d-355bbedf6edb) ✓ returns metadata from /_metadata endpoint Create, Read, Update, Destroy info: that was tasty! oooooooooooooooo ooooooooo ooooooo ooo ooo ooooooo ooo oooooo ooo oooooooooooooooo ooooooo ooooooo oooo ooo oooooooo ooo oooooooo ooo ooo ooo ooo ooo oooo ooo ooo ooo ooo ooo ooo oooooo oooooo ooo oooooo oooooooo ooo ooo ooo ooo oo ooo oooooo oooooo ooo oooooo oo ooooo ooo ooo ooo ooo oooo ooo oooooo oooooo ooo ooo oo oooo ooo ooo ooo ooo ooo ooo oooooo ooo  ooo ooo oo oooo ooo ooo ooo oooo ooo ooo oooooo ooo  ooo ooooooo oo ooo ooooooo ooo oooooo ooo info: Obsidian Server version: 1.0.0 info: Loading environment... info: Loading resources... info: ==> Loaded service metadata (`test` version 0.0.1) info: ==> Loaded resource `simpleTestResource` info: ==> Loaded resource `intermediateTestResource` info: ==> Loaded resource `relationshipTestResourceA` info: ==> Loaded resource `relationshipTestResourceB` info: ==> Loaded resource `relationshipTestResourceC` info: ==> Loaded resource `userTestResourceA` info: ==> Loaded resource `userTestResourceB` info: ==> Loaded resource `userTestResourceC` info: ==> Loaded resource `customTestResource` info: Detected single-database environment. info: Configuring adapter `primary` with options: type=file options={ directory=./db/ } info: ==> Detected `file` database for adapter `primary` info: Starting server... info: Started server with options: host=0.0.0.0 port=8000 http: 401 POST /simpleTestResource/create (ffadef43-04e5-5c33-a00f-d91aa47c641f) ✓ fails to create a default record with no credentials set db: create simpletestresource http: 201 POST /simpleTestResource/create (a8bb71cb-1b2d-5e69-b177-6a89f30ce2f2) ✓ creates a default record with no attributes db: create intermediatetestresource http: 201 POST /intermediateTestResource/create (9bf2bc3d-d35e-55f8-8a39-f588e79a0ec6) ✓ uses supplied default values when creating new records db: create simpletestresource: myString=dooba myOtherString=flooba http: 201 POST /simpleTestResource/create (780a9aa9-59e6-5dcc-b9e7-3a459e36662e) ✓ uses passed values when creating new records http: 401 GET /simpleTestResource/read (4f12c46a-b5fa-51c9-ac0b-059947836182) ✓ fails to read records with no credentials set http: 200 GET /simpleTestResource/read (73274e7a-ea34-5ac5-b898-d86b0873565f) ✓ receives an empty array for an unmatchable criteria http: 200 GET /simpleTestResource/read (9063550b-ce78-511f-a9f7-28442e598ef8) ✓ receives a non-empty array for a matchable criteria http: 401 PATCH /simpleTestResource/update (4fc2bf60-369f-5f73-a517-2a2105f7bdff) ✓ fails to update records with no credentials set http: 422 PATCH /simpleTestResource/update (d8208eab-4cf0-5887-930b-352049cf6531) ✓ fails to update records without a record object set http: 422 PATCH /simpleTestResource/update (dbd6908f-4dd7-544e-95b5-5d6e7e5c5966) ✓ fails to update records without a criteria object set db: update simpletestresource: myString=Make America myOtherString=Great Again updatedAt={ July 27th 2016, 1:00:42 pm } http: 200 PATCH /simpleTestResource/update (198693a8-7487-5753-9de7-f44ae66de84d) ✓ updates a property on a record successfully db: update simpletestresource: myString=Make America myOtherString=Derp Again updatedAt={ July 27th 2016, 1:00:42 pm } http: 404 PATCH /simpleTestResource/update (1ba13b0a-1d05-5afa-a480-baaed99ce6bd) ✓ doesn't update properties on records that don't exist http: 401 DELETE /simpleTestResource/destroy (5f33bee4-cf4f-5cc6-a0be-4d3f1d82fc9a) ✓ fails to destroy records with no credentials set db: destroy simpletestresource: id={ >=99999 } http: 404 DELETE /simpleTestResource/destroy (a28d2ef9-eb3b-546c-bffb-25820ba34bed) ✓ fails to destroy records that don't exist db: destroy simpletestresource: id={ <=99999 } http: 200 DELETE /simpleTestResource/destroy (84ecda0f-c74c-580a-b36a-7f32a56fee92) ✓ deletes all records matching a criteria Query Syntax info: that was tasty! oooooooooooooooo ooooooooo ooooooo ooo ooo ooooooo ooo oooooo ooo oooooooooooooooo ooooooo ooooooo oooo ooo oooooooo ooo oooooooo ooo ooo ooo ooo ooo oooo ooo ooo ooo ooo ooo ooo oooooo oooooo ooo oooooo oooooooo ooo ooo ooo ooo oo ooo oooooo oooooo ooo oooooo oo ooooo ooo ooo ooo ooo oooo ooo oooooo oooooo ooo ooo oo oooo ooo ooo ooo ooo ooo ooo oooooo ooo  ooo ooo oo oooo ooo ooo ooo oooo ooo ooo oooooo ooo  ooo ooooooo oo ooo ooooooo ooo oooooo ooo info: Obsidian Server version: 1.0.0 info: Loading environment... info: Loading resources... info: ==> Loaded service metadata (`test` version 0.0.1) info: ==> Loaded resource `simpleTestResource` info: ==> Loaded resource `intermediateTestResource` info: ==> Loaded resource `relationshipTestResourceA` info: ==> Loaded resource `relationshipTestResourceB` info: ==> Loaded resource `relationshipTestResourceC` info: ==> Loaded resource `userTestResourceA` info: ==> Loaded resource `userTestResourceB` info: ==> Loaded resource `userTestResourceC` info: ==> Loaded resource `customTestResource` info: Detected single-database environment. info: Configuring adapter `primary` with options: type=file options={ directory=./db/ } info: ==> Detected `file` database for adapter `primary` info: Starting server... info: Started server with options: host=0.0.0.0 port=8000 db: create intermediatetestresource: anInt=9323 http: 201 POST /intermediateTestResource/create (40a98142-61db-5739-9457-7c6f1429470e) db: create intermediatetestresource: aFloat=56.65 http: 201 POST /intermediateTestResource/create (ef14dc85-f340-5394-98de-5472c4b6fe08) db: create intermediatetestresource: aString=That awkward moment when you realize you bought a gold MacBook. http: 201 POST /intermediateTestResource/create (63542b4c-45fe-5c24-afc9-ffb6674a0d1b) db: create intermediatetestresource: aBoolean=true http: 201 POST /intermediateTestResource/create (1a62047e-a9ca-55b5-8bbb-573b8bcc812a) db: create intermediatetestresource: aDate=2016-02-21T17:52:11.824Z http: 201 POST /intermediateTestResource/create (c4d3b6b6-3444-56d9-9491-83f60f0b3e53) db: create intermediatetestresource: anInt=-2 aString=intSequence http: 201 POST /intermediateTestResource/create (cbec2859-47d1-50ba-97b4-bde48d549e96) db: create intermediatetestresource: anInt=-1 aString=intSequence http: 201 POST /intermediateTestResource/create (8d2ba331-b965-54f2-8964-c5d8a1d1f06e) db: create intermediatetestresource: anInt=0 aString=intSequence http: 201 POST /intermediateTestResource/create (3e949c80-2be2-5a29-8e9b-291d03f91471) db: create intermediatetestresource: anInt=1 aString=intSequence http: 201 POST /intermediateTestResource/create (e46805a5-a8bb-5f34-a942-fa9d769dc56d) db: create intermediatetestresource: anInt=2 aString=intSequence http: 201 POST /intermediateTestResource/create (b52726d7-9e73-548a-8be3-4ec4079ab7bc) db: create intermediatetestresource: anInt=3 aString=intSequence http: 201 POST /intermediateTestResource/create (929b2fb9-381a-54f2-ade7-25364409c665) db: create intermediatetestresource: anInt=4 aString=intSequence http: 201 POST /intermediateTestResource/create (8140f438-afd0-58bf-80f0-63cdfcfa1203) db: create intermediatetestresource: aFloat=-1.7 aString=floatSequence http: 201 POST /intermediateTestResource/create (64e932b1-ad90-54a7-bf2c-1d001c22c846) db: create intermediatetestresource: aFloat=-0.5 aString=floatSequence http: 201 POST /intermediateTestResource/create (d6711256-8128-51d5-b218-7c5cb700ae8f) db: create intermediatetestresource: aFloat=0 aString=floatSequence http: 201 POST /intermediateTestResource/create (8d1787cd-f104-5c2f-b572-eeedbfd2626d) db: create intermediatetestresource: aFloat=0.1 aString=floatSequence http: 201 POST /intermediateTestResource/create (b6e1de3b-ae32-5766-bcd7-718808ae600c) db: create intermediatetestresource: aFloat=0.3 aString=floatSequence http: 201 POST /intermediateTestResource/create (8bd7a5d3-1a5a-55b4-bcaf-3b64d1c19fe5) db: create intermediatetestresource: aFloat=0.7 aString=floatSequence http: 201 POST /intermediateTestResource/create (57d159ee-e1f2-5c67-a3c2-69af9c74b082) db: create intermediatetestresource: aDefaultString=a aString=stringSequence http: 201 POST /intermediateTestResource/create (b6b04f27-bc3b-57bc-9c93-cc12f7177f68) db: create intermediatetestresource: aDefaultString=b aString=stringSequence http: 201 POST /intermediateTestResource/create (5ddc88a9-593d-51f3-8ad4-eb7d6d4625ad) db: create intermediatetestresource: aDefaultString=c aString=stringSequence http: 201 POST /intermediateTestResource/create (91aeaedc-9cc0-58b9-8653-1a4f13c15f64) db: create intermediatetestresource: aDefaultString=d aString=stringSequence http: 201 POST /intermediateTestResource/create (04eed091-c608-5147-b7a5-4f86c32a2f88) db: create intermediatetestresource: aDefaultString=e aString=stringSequence http: 201 POST /intermediateTestResource/create (57d19b07-0dc2-5f08-971b-45f5cf7c4c2e) db: create intermediatetestresource: aDefaultString=f aString=stringSequence http: 201 POST /intermediateTestResource/create (364f9755-ab17-5661-8c5e-a32ab8e70446) db: create intermediatetestresource: aBoolean=false aString=booleanSequence http: 201 POST /intermediateTestResource/create (c31ceace-742a-5b68-be07-7e55b0d8b180) db: create intermediatetestresource: aBoolean=true aString=booleanSequence http: 201 POST /intermediateTestResource/create (6c86dc85-6c1c-56eb-b694-fb10c9c6f8fa) db: create intermediatetestresource: aDate=2001-02-05T05:00:00.000Z aString=dateSequence http: 201 POST /intermediateTestResource/create (db7bbc1f-04f5-551e-972e-5e843cebbfa6) db: create intermediatetestresource: aDate=2002-02-05T05:00:00.000Z aString=dateSequence http: 201 POST /intermediateTestResource/create (707f3945-f30d-52b7-8d86-33209408e204) db: create intermediatetestresource: aDate=2003-02-05T05:00:00.000Z aString=dateSequence http: 201 POST /intermediateTestResource/create (259778fa-df8b-5a62-be91-8a83fbe7eb86) db: create intermediatetestresource: aDate=2004-02-05T05:00:00.000Z aString=dateSequence http: 201 POST /intermediateTestResource/create (4468b852-3e87-58a3-8aae-4d0385e7ab65) db: create intermediatetestresource: aDate=2005-02-05T05:00:00.000Z aString=dateSequence http: 201 POST /intermediateTestResource/create (283cd784-9270-5598-936f-a149ae2bd4c4) db: create intermediatetestresource: aDate=2006-02-05T05:00:00.000Z aString=dateSequence http: 201 POST /intermediateTestResource/create (25d589cc-57c8-588d-aa06-83d718caf42b) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (9d3d227b-3b05-58ce-8ca2-689e62d749ee) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (eef64015-0112-51db-ae64-057517cb0733) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (a0187dbb-3841-5339-946e-2809a94b608d) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (26da2fcb-ccd4-5c12-a7e1-809adccc740c) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (7b8a9889-d517-55db-b6cc-e2696787a3f2) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (aca379d9-30ac-5780-bf01-c60d50e29c4f) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (095d7875-7112-5e20-900b-a97614c29fea) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (8ed9d467-82c7-53cf-a64f-c408ae0e102b) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (9129f3da-babc-54b1-94e2-680666d411bc) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (71116c91-e052-550c-8a7e-58874a910d16) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (ab5adea1-87e9-51b4-8583-370411c280c3) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (6ffe4c7e-d2a1-52b5-8286-63bb5fe97099) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (84b540a3-beeb-5c6b-bff8-6a3b93d05eab) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (c98aef11-570c-50f1-b433-2f7fa9d610f7) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (04c1e3de-eb6b-5dff-aca4-d32e7da3c4f6) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (6448be9f-043c-5043-a6a1-5b72bef73af9) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (e831e301-332d-5bb3-a74c-2bafa5aae984) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (cd1560c0-5157-5fc3-bc55-aed6aba77c61) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (eb17cef1-cd0c-5382-aed3-ca0250e2d231) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (5992b64a-2f25-5e30-9136-4368e20e8c9a) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (36fad090-c31f-5311-9d5a-113f7690177c) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (c544c485-9311-5c42-aba1-8e6196e9c35d) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (d3fb7bf8-2b7c-57e9-8193-82b5d4d53dea) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (f4218247-4735-5999-9525-611a23123356) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (cba7a9a6-9a1f-5b35-ac1c-ffecfc0d64a7) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (81e41759-a9b7-5ce9-81f3-f8367510f6ac) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (a9e688c2-acd8-5b0a-929c-51e502463db8) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (0b4ccf40-250a-5cd1-bba3-369b26661deb) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (3aad544e-c297-5718-a2bf-c007a9293c6f) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (7692cd5d-cae1-51a6-ae85-5be00410f73a) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (8d7ca0b0-4cc7-5326-902d-8e70b4d042df) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (abea2278-3fef-5e43-8a06-bf3ba762493a) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (75f6001f-310a-5ad2-b5ca-fc677c6c298d) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (9ad4700a-b8cf-5045-9044-29140da23b5f) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (7cf38fa1-1de5-5d2a-b4f8-320ebce60de5) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (13c40b6a-476f-578c-9957-1975fb6de89a) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (abbe204b-dafb-5a00-a12a-ea4217c73eac) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (ca3ee153-cf55-559c-b2c6-80933efcef2d) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (f84951fa-0eeb-5c98-8d6d-f60c74fbc922) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (29f3904a-3f52-51aa-9423-c8a32f7002d0) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (e41d8ec7-725d-5661-b5d5-7b365a080988) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (d8c01c8c-afe3-56f7-873f-17d2a6d5fb88) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (e5236034-88ad-50d9-83e1-6a58e52bb76b) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (77956899-ef95-5ef3-8311-23f7b3bd064a) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (60abcf94-f0fe-5154-ad2b-440912355bf1) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (723266d6-b9d2-5821-9352-00de6b63aa25) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (49224fb7-ca55-54c2-a0e7-05d5503eadd7) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (5fc9b25d-7568-530d-bd7e-b56bf35d9055) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (8dee7c70-72dc-51b7-8821-f1d89d933faa) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (848e1fe4-dccb-5b49-8fb2-ed3ebd352f42) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (e8787f7e-efc9-5dce-b9a0-892cebf4fc0e) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (a534fdea-565c-5051-b1fd-24cc4b7391c5) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (bbd37f70-411b-5d7d-ba84-591cd659d89c) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (cc95d31c-4cb0-51ac-91d1-d105eb0685a2) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (5fefd338-af0a-5814-9beb-26dbe8b523f4) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (276e418d-c892-5967-b371-71ec165002da) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (c9a80b68-fcf2-5f61-b362-bcb0fa2a055d) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (81ad21db-101d-5300-ba41-01e21119abb3) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (a0f1b0a0-a3a0-5f6e-ab22-8f6a7b884b72) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (1a350029-efd1-5e29-ba46-e018222f5a1b) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (1325da3f-5d76-510d-a0a2-05c65da38c34) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (c050308e-881c-57fc-b81f-da67e372fd59) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (78011512-547b-5517-89f5-dc3297bbd176) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (85507824-bf43-5578-b067-96b6ef86ede7) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (3eb4728e-9ef3-536c-a148-3b2610d07403) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (f0af25e3-dedb-560f-b39d-18c00d3baa63) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (525b7a6f-948b-5da2-9e86-ddb06cb5085c) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (2c173587-ee42-5579-b3b7-b03f69cbf8ce) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (ce249c0f-186b-5e5e-8b97-40895ab1c723) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (c7c048d5-6b61-52e4-b18c-8d0f9eaa389f) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (d62f06c7-c133-5979-a242-4c57253a6dc4) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (c9932102-9126-565d-96ea-bdcf0e58bbd6) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (9e82ef43-cee9-5b75-9d3d-1d3ca4303239) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (1ae329ea-0ae1-55d6-9fc0-4b6bca120e7d) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (bf91d3ed-d9ae-57db-a548-af19c3087f68) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (3cc2306a-fea5-5c44-aa52-f44f34fdfb61) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (6f8e392c-6631-5424-afdf-015e71731876) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (916b613e-491b-58e9-a5a6-fced0b100b5a) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (fe3a0c65-cfca-52cc-a63e-e48a24810b1e) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (1553dbcb-5436-5183-8b79-877db07779ed) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (262f3bd1-4144-5384-8531-1fccfeb2ae55) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (2f329d31-9417-5a13-968d-f6d08194fbea) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (d25328c1-fcee-59e5-9189-fa07d546ea97) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (0b9b99e4-5549-5307-afa8-edccb505c0ac) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (f20f24ae-ce39-5014-b274-b7c7d474f7d4) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (6ebb3a8b-9484-5e09-bd4c-6f62643adc19) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (db397fab-31fb-5339-afb7-fe3ee1766f87) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (7d339e5c-a9b6-54cd-82bd-18b21e232bd8) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (59f9b3b8-4d7e-5789-aade-374d13facf01) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (9bc95f5a-4a59-542a-a859-9b969b205f8e) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (7afd34b5-7b35-5abb-84c7-ed929efe6830) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (4ad9d61d-2a50-5d61-b01a-5e1f58e46545) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (bacf0b77-2703-53f1-8cbd-05eaaead35c5) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (b1cb12a0-de9d-5f0d-97c2-508a59ebe047) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (c746a916-6bdf-5e46-8417-6fcfdadf320f) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (67b481a7-5fa0-5104-9100-7643ff088f09) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (3800526a-599c-5c38-a557-cedaa2b86675) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (9a1db377-1812-5091-9a90-2fbbfde18e19) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (534b6162-c252-5fb7-a333-da28651454b4) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (0db6a6a5-6561-59c9-ae63-458759be83d2) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (24bf2af0-2c52-5a61-a9da-d72520d7eacd) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (9de63325-f3c0-51a4-b097-fb4ceb3d2b87) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (fcdc1190-a567-581d-809c-a80f37b6e04b) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (a0ff81a5-4c70-5189-b4db-91cff24fb8d6) db: create intermediatetestresource: aString=pagination http: 201 POST /intermediateTestResource/create (4a6e625c-9442-5f9a-9b77-6e3e079b1190) http: 200 GET /intermediateTestResource/read (f8784b87-e856-562f-9780-9deabf08c29e) ✓ returns only one record when pagination is undefined http: 200 GET /intermediateTestResource/read (3a139767-cbd1-57b4-b0ee-1c7b7c973186) ✓ supports querying by int http: 200 GET /intermediateTestResource/read (f24cdd13-f5c3-5f92-b833-e47061a60f97) ✓ supports querying by float http: 200 GET /intermediateTestResource/read (d4eb2f2d-1fa6-5047-8e60-e44bfb1d7b77) ✓ supports querying by string http: 200 GET /intermediateTestResource/read (fda6d01d-7746-5720-9a4d-b0a1290b8bd2) ✓ supports querying by boolean http: 200 GET /intermediateTestResource/read (8bffdfee-a147-56a0-8080-e3c8c6343504) ✓ supports querying by date http: 200 GET /intermediateTestResource/read (550dd8ca-ff2e-510e-8b05-74a65a5ef54b) ✓ filters int using the < operator http: 200 GET /intermediateTestResource/read (ab43a041-a55b-5722-affb-81010f68cb26) ✓ filters int using the > operator http: 200 GET /intermediateTestResource/read (b2d082b8-35ff-5ad1-a1de-95a4917d5f0d) ✓ filters int using the <= operator http: 200 GET /intermediateTestResource/read (098e61c1-ed45-5725-8b44-c018d59fb23b) ✓ filters int using the >= operator http: 200 GET /intermediateTestResource/read (ebf7c311-a68c-59c1-a2bc-59c6890b2e91) ✓ filters int using the ! operator http: 200 GET /intermediateTestResource/read (c6830bb7-f798-5087-a5ed-346a4f251ca9) ✓ sorts int in direction: ASC http: 200 GET /intermediateTestResource/read (7ebdb2ca-6682-577c-969e-e2e23b5a2721) ✓ sorts int in direction: DESC http: 200 GET /intermediateTestResource/read (84308ac6-fd90-575c-8c5f-323747e88837) ✓ filters float using the < operator http: 200 GET /intermediateTestResource/read (da01c765-93fc-54f7-a846-702e8a34a3e7) ✓ filters float using the > operator http: 200 GET /intermediateTestResource/read (35630dcd-583d-5872-8c9e-60e761311490) ✓ filters float using the <= operator http: 200 GET /intermediateTestResource/read (c4b1c397-27cb-5648-a3a1-4e676c6f7a9b) ✓ filters float using the >= operator http: 200 GET /intermediateTestResource/read (746b2d96-ec3e-5cc0-a84a-751189a77519) ✓ filters float using the ! operator http: 200 GET /intermediateTestResource/read (e9bd0d7b-28c4-577e-a8ca-4a9a45e6c714) ✓ sorts float in direction: ASC http: 200 GET /intermediateTestResource/read (6e57a624-92a5-5a31-b637-832bd9055221) ✓ sorts float in direction: DESC http: 200 GET /intermediateTestResource/read (f05c4e7a-a1df-5a7a-84e1-6c4e6b57c86a) ✓ filters string using the < operator http: 200 GET /intermediateTestResource/read (2acfd079-465a-5188-8f4e-0067e19d2045) ✓ filters string using the > operator http: 200 GET /intermediateTestResource/read (baff1d54-6dbe-5e2d-9900-8935f143c3ea) ✓ filters string using the <= operator http: 200 GET /intermediateTestResource/read (506269d6-ac6e-57ba-9d98-8730295b46d4) ✓ filters string using the >= operator http: 200 GET /intermediateTestResource/read (e8f2aa23-fc6a-5b25-a8a8-bfacda098719) ✓ filters string using the ! operator http: 200 GET /intermediateTestResource/read (a0a8a8e3-3fe2-58f1-af8c-30bf79debef3) ✓ sorts string in direction: ASC http: 200 GET /intermediateTestResource/read (bf92d708-b68c-5b95-8c00-972a541aad68) ✓ sorts string in direction: DESC http: 200 GET /intermediateTestResource/read (eb72ba0c-7baa-503a-9f3c-7a346e07c66f) ✓ filters boolean using the < operator http: 200 GET /intermediateTestResource/read (29f89bb7-eee3-592b-93b5-68ccc8db15e1) ✓ filters boolean using the > operator http: 200 GET /intermediateTestResource/read (d7f4a7e5-3955-5bdc-b849-69dee50da852) ✓ filters boolean using the <= operator http: 200 GET /intermediateTestResource/read (f56f71ca-6556-5a2b-b1cd-3a399e7a8eba) ✓ filters boolean using the >= operator http: 200 GET /intermediateTestResource/read (86c237bd-4f51-5793-b0c7-d60fa112201e) ✓ filters boolean using the ! operator http: 200 GET /intermediateTestResource/read (1fbd9a01-9954-5789-8269-e5feaa046278) ✓ sorts boolean in direction: ASC http: 200 GET /intermediateTestResource/read (6fec08f0-92d6-5ede-a071-ea91f47b4468) ✓ sorts boolean in direction: DESC http: 200 GET /intermediateTestResource/read (3d4c823a-869c-5fc0-a8d7-f9d86a45f06e) ✓ filters date using the < operator http: 200 GET /intermediateTestResource/read (e16db466-558d-55c5-a194-d30ccfb372d0) ✓ filters date using the > operator http: 200 GET /intermediateTestResource/read (f6046a17-4e20-5efb-8026-0d5e703b87f2) ✓ filters date using the <= operator http: 200 GET /intermediateTestResource/read (46c7abfb-83c2-549c-a63e-73f688c437de) ✓ filters date using the >= operator http: 200 GET /intermediateTestResource/read (d1dd692c-bce0-5340-809a-4056aaa373a0) ✓ filters date using the ! operator http: 200 GET /intermediateTestResource/read (5dc949a6-53c3-59f8-a897-bdde1bffa93c) ✓ sorts date in direction: ASC http: 200 GET /intermediateTestResource/read (7268e642-61c6-5e2b-9ec2-adeeb7e4ea34) ✓ sorts date in direction: DESC http: 200 GET /intermediateTestResource/read (a3608351-be96-52d7-b642-97008c6cc457) http: 200 GET /intermediateTestResource/read (a86ca6c3-6132-5eb3-82ff-3eab11f73777) http: 200 GET /intermediateTestResource/read (9a5e5ac9-9a94-5455-9e39-02376430eee8) http: 200 GET /intermediateTestResource/read (bd74fbe2-af44-5a16-a253-18260fac48e9) http: 200 GET /intermediateTestResource/read (f19858a9-f892-54a9-a5d0-14151fb29a9c) ✓ paginates results Relationships info: that was tasty! oooooooooooooooo ooooooooo ooooooo ooo ooo ooooooo ooo oooooo ooo oooooooooooooooo ooooooo ooooooo oooo ooo oooooooo ooo oooooooo ooo ooo ooo ooo ooo oooo ooo ooo ooo ooo ooo ooo oooooo oooooo ooo oooooo oooooooo ooo ooo ooo ooo oo ooo oooooo oooooo ooo oooooo oo ooooo ooo ooo ooo ooo oooo ooo oooooo oooooo ooo ooo oo oooo ooo ooo ooo ooo ooo ooo oooooo ooo  ooo ooo oo oooo ooo ooo ooo oooo ooo ooo oooooo ooo  ooo ooooooo oo ooo ooooooo ooo oooooo ooo info: Obsidian Server version: 1.0.0 info: Loading environment... info: Loading resources... info: ==> Loaded service metadata (`test` version 0.0.1) info: ==> Loaded resource `simpleTestResource` info: ==> Loaded resource `intermediateTestResource` info: ==> Loaded resource `relationshipTestResourceA` info: ==> Loaded resource `relationshipTestResourceB` info: ==> Loaded resource `relationshipTestResourceC` info: ==> Loaded resource `userTestResourceA` info: ==> Loaded resource `userTestResourceB` info: ==> Loaded resource `userTestResourceC` info: ==> Loaded resource `customTestResource` info: Detected single-database environment. info: Configuring adapter `primary` with options: type=file options={ directory=./db/ } info: ==> Detected `file` database for adapter `primary` info: Starting server... info: Started server with options: host=0.0.0.0 port=8000 db: create relationshiptestresourcea: stringA=single child=1 http: 201 POST /relationshipTestResourceA/create (d2727f0b-8325-5bc3-9712-91753bfecaa2) db: create relationshiptestresourcea: stringA=multi http: 201 POST /relationshipTestResourceA/create (4cacf9bf-02e6-5e45-aad5-c25f20e98b45) db: create relationshiptestresourceb: parent=1 http: 201 POST /relationshipTestResourceB/create (1523b0fc-36ff-50d6-9da5-10cb264fe0a8) db: create relationshiptestresourcec: parent=2 stringC=relationship 0 db: create relationshiptestresourcec: parent=2 stringC=relationship 1 db: create relationshiptestresourcec: parent=2 stringC=relationship 2 db: create relationshiptestresourcec: parent=2 stringC=relationship 3 db: create relationshiptestresourcec: parent=2 stringC=relationship 4 http: 201 POST /relationshipTestResourceC/create (90f56ff5-1e1c-59e7-ac4a-a6ed9e1499ac) http: 201 POST /relationshipTestResourceC/create (0574e455-03a3-5322-b553-785dc4a2840f) http: 201 POST /relationshipTestResourceC/create (68f8b0d8-2d64-5c2c-8311-0e1e0a6d5f02) http: 201 POST /relationshipTestResourceC/create (a047e432-6e44-53b5-a7f4-adb4895a8e07) http: 201 POST /relationshipTestResourceC/create (85266ac0-0169-5f8c-8292-3e80e588c3d1) http: 200 GET /relationshipTestResourceA/read (b6f5b4b2-47da-59b1-9ed7-4ece0c6e8538) ✓ should return has_one children http: 200 GET /relationshipTestResourceA/read (fa78fcdb-c3be-5fc9-8b14-28582fbbca4d) ✓ should return has_many children http: 200 GET /relationshipTestResourceB/read (f02e322a-9361-5f48-aa82-abeb4515d830) ✓ should return has_one parents http: 200 GET /relationshipTestResourceC/read (87d4dd41-abb7-5a51-af07-e4ed00e0aa55) ✓ should return has_many parents User Authentication info: that was tasty! oooooooooooooooo ooooooooo ooooooo ooo ooo ooooooo ooo oooooo ooo oooooooooooooooo ooooooo ooooooo oooo ooo oooooooo ooo oooooooo ooo ooo ooo ooo ooo oooo ooo ooo ooo ooo ooo ooo oooooo oooooo ooo oooooo oooooooo ooo ooo ooo ooo oo ooo oooooo oooooo ooo oooooo oo ooooo ooo ooo ooo ooo oooo ooo oooooo oooooo ooo ooo oo oooo ooo ooo ooo ooo ooo ooo oooooo ooo  ooo ooo oo oooo ooo ooo ooo oooo ooo ooo oooooo ooo  ooo ooooooo oo ooo ooooooo ooo oooooo ooo info: Obsidian Server version: 1.0.0 info: Loading environment... info: Loading resources... info: ==> Loaded service metadata (`test` version 0.0.1) info: ==> Loaded resource `simpleTestResource` info: ==> Loaded resource `intermediateTestResource` info: ==> Loaded resource `relationshipTestResourceA` info: ==> Loaded resource `relationshipTestResourceB` info: ==> Loaded resource `relationshipTestResourceC` info: ==> Loaded resource `userTestResourceA` info: ==> Loaded resource `userTestResourceB` info: ==> Loaded resource `userTestResourceC` info: ==> Loaded resource `customTestResource` info: Detected single-database environment. info: Configuring adapter `primary` with options: type=file options={ directory=./db/ } info: ==> Detected `file` database for adapter `primary` info: Starting server... info: Started server with options: host=0.0.0.0 port=8000 db: create usertestresourcea: user_authentication_email=nick@tendigi.com user_authentication_password=$2a$10$UzRP9mJKQwouM5FN6px3yuctWHfYA7ClwsMBDdh/lyIqCldgYzSW6 http: 201 POST /userTestResourceA/create (e2a27f9a-7cdd-5b9f-bf63-4d2a54871ed9) ✓ Creates a user with an email address db: create usertestresourceb: user_authentication_username=nickplee user_authentication_password=$2a$10$ypHkORd.GoJO1/5ozGPNvuGPOsdRevgbtwd1VUUttqmXLFO81Ka1a http: 201 POST /userTestResourceB/create (05d82d92-c07f-5c2d-a803-029e8df03303) ✓ Creates a user with a username db: create usertestresourcec: user_authentication_username=nickplee2 user_authentication_email=nick@nickplee.com user_authentication_password=$2a$10$9wkJFg/JbSUd4N2ZtSgFSu4vST9ufZGzeHOlU3.g9aQgfOZe1HUue http: 201 POST /userTestResourceC/create (33d9d24e-00fd-50ae-9698-1ccc6d27f221) ✓ Creates a user with a username and an email address http: 200 POST /userTestResourceA/user_authentication_login (6b714228-7699-5126-a7b1-9596b0683058) ✓ successfully logs in with email http: 200 POST /userTestResourceB/user_authentication_login (1233a6d8-2703-5b05-a632-f35b50f2f3bb) ✓ successfully logs in with username http: 200 POST /userTestResourceC/user_authentication_login (0043bea0-3ce0-5127-8238-ca416b9a6f41) ✓ successfully logs in with email (on a record with both email and username) http: 200 POST /userTestResourceC/user_authentication_login (1bf8abb7-f8ba-5bcc-9510-1a6eb46353c9) ✓ successfully logs in with username (on a record with both email and username) http: 401 POST /userTestResourceA/user_authentication_login (45878466-98b7-5f50-ba86-8185305847dd) ✓ unsuccessfully logs in with wrong email http: 401 POST /userTestResourceB/user_authentication_login (d6557601-4bd4-5add-be86-b9d9dc797cc7) ✓ unsuccessfully logs in with wrong username http: 401 POST /userTestResourceC/user_authentication_login (782951cf-3c04-5527-a9d9-1c5619c24310) ✓ unsuccessfully logs in with wrong email (on a record with both email and username) http: 401 POST /userTestResourceC/user_authentication_login (3ba52311-a01f-5f56-a836-df735796582c) ✓ unsuccessfully logs in with wrong username (on a record with both email and username) http: 401 POST /userTestResourceA/user_authentication_login (da2a6690-8175-5991-ba1d-fb59b7e33fe9) ✓ unsuccessfully logs in with email and wrong password http: 401 POST /userTestResourceB/user_authentication_login (c548bdcc-2ba3-57d2-89ba-09021a685136) ✓ unsuccessfully logs in with username and wrong password http: 401 POST /userTestResourceC/user_authentication_login (ab9d0ea9-670d-5378-b4ce-f7460a7a1a96) ✓ unsuccessfully logs in with email and wrong password (on a record with both email and username) http: 401 POST /userTestResourceC/user_authentication_login (1883e97a-525b-55f1-ae2e-065a661b6eb5) ✓ unsuccessfully logs in with username and wrong password (on a record with both email and username) http: 401 GET /userTestResourceA/read (c4b51455-85bf-591b-8236-76272acdbb32) ✓ fails to authenticate with methods on userTestResourceA http: 200 GET /userTestResourceA/read (82cdc80d-8222-5ea7-8ea1-d6fc75a4b869) ✓ authenticates with methods on userTestResourceA http: 401 GET /userTestResourceB/read (e10d9361-395b-5863-84b1-0c0f70fe2de1) ✓ fails to authenticate with methods on userTestResourceB http: 200 GET /userTestResourceB/read (7f63f869-43ad-51b8-a8f5-0832d523a832) ✓ authenticates with methods on userTestResourceB http: 401 GET /userTestResourceC/read (5e6b7d6b-cd4c-5028-8ab1-794530a1efc5) ✓ fails to authenticate with methods on userTestResourceC http: 200 GET /userTestResourceC/read (f3336ba9-036a-59a3-9726-df4e39915b99) ✓ authenticates with methods on userTestResourceC http: 401 GET /userTestResourceC/read (f083884c-0d2c-56f7-8fac-2dc445f27190) ✓ fails to authenticate with methods when match_attribute does not match Custom Methods info: that was tasty! oooooooooooooooo ooooooooo ooooooo ooo ooo ooooooo ooo oooooo ooo oooooooooooooooo ooooooo ooooooo oooo ooo oooooooo ooo oooooooo ooo ooo ooo ooo ooo oooo ooo ooo ooo ooo ooo ooo oooooo oooooo ooo oooooo oooooooo ooo ooo ooo ooo oo ooo oooooo oooooo ooo oooooo oo ooooo ooo ooo ooo ooo oooo ooo oooooo oooooo ooo ooo oo oooo ooo ooo ooo ooo ooo ooo oooooo ooo  ooo ooo oo oooo ooo ooo ooo oooo ooo ooo oooooo ooo  ooo ooooooo oo ooo ooooooo ooo oooooo ooo info: Obsidian Server version: 1.0.0 info: Loading environment... info: Loading resources... info: ==> Loaded service metadata (`test` version 0.0.1) info: ==> Loaded resource `simpleTestResource` info: ==> Loaded resource `intermediateTestResource` info: ==> Loaded resource `relationshipTestResourceA` info: ==> Loaded resource `relationshipTestResourceB` info: ==> Loaded resource `relationshipTestResourceC` info: ==> Loaded resource `userTestResourceA` info: ==> Loaded resource `userTestResourceB` info: ==> Loaded resource `userTestResourceC` info: ==> Loaded resource `customTestResource` info: Detected single-database environment. info: Configuring adapter `primary` with options: type=file options={ directory=./db/ } info: ==> Detected `file` database for adapter `primary` info: Starting server... info: Started server with options: host=0.0.0.0 port=8000 http: 200 GET /customTestResource/kaboom (a30fbfe3-fedd-59f3-b17f-36f8ed0f9b71) ✓ allows the use of custom GET methods http: 200 POST /customTestResource/kablam (2acea631-1498-54d4-a28a-3e8e73922da4) ✓ allows the use of custom POST methods http: 200 PUT /customTestResource/kablewie (07f2b12a-b436-5172-97cd-12b21ae015a1) ✓ allows the use of custom PUT methods http: 200 PATCH /customTestResource/blurp (bede0e57-2258-50c1-a9b8-5f82eb65a6eb) ✓ allows the use of custom PATCH methods http: 200 DELETE /customTestResource/see_ya (667eb4ef-6ed6-56a0-be12-b57f479da520) ✓ allows the use of custom DELETE methods info: that was tasty! Executed 93 tests in 6 suites in 4s 574ms All passes