Skip to content

Commit

Permalink
scriptotek#23: Add codetable tests and docs
Browse files Browse the repository at this point in the history
  • Loading branch information
ctgraham committed Nov 16, 2020
1 parent 8530dbd commit fcd101a
Show file tree
Hide file tree
Showing 4 changed files with 212 additions and 0 deletions.
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ If the package doesn't fit your needs, you might take a look at the alternative
* [Listing jobs](#listing-jobs)
* [Retrieving information about a specific job](#retrieving-information-about-a-specific-job)
* [Submitting a job](#submitting-a-job)
* [Code Tables](#code-tables)
* [Getting a single code table](#getting-a-codetable)
* [Automatic retries on errors](#automatic-retries-on-errors)
* [Laravel integration](#laravel-integration)
* [Customizing the HTTP client stack](#customizing-the-http-client-stack)
Expand Down Expand Up @@ -530,6 +532,20 @@ $job = $alma->jobs['M43'];
$instance = $alma->jobs['M43']->submit();
```

## Code Tables

### Getting a Code Table

To fetch a code table

```php
$ct = $alma->codetables->get('systemJobStatus');
echo "Rows for ".$ct->sub_system->value."'s ".$ct->name."\n";
foreach ($ct->row as $row) {
echo "code: ".$row->code.", description: ".$row->description."\n";
}
```

## Automatic retries on errors

If the client receives a 429 (rate limiting) response from Alma, it will sleep for a short time (0.5 seconds by default)
Expand Down
47 changes: 47 additions & 0 deletions spec/Conf/CodeTableSpec.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?php

namespace spec\Scriptotek\Alma\CodeTable;

use PhpSpec\ObjectBehavior;
use Prophecy\Argument;
use Scriptotek\Alma\Conf\CodeTable;
use Scriptotek\Alma\Conf\CodeTables;
use Scriptotek\Alma\Client as AlmaClient;
use Scriptotek\Alma\Exception\ResourceNotFound;
use spec\Scriptotek\Alma\SpecHelper;

class CodeTableSpec extends ObjectBehavior
{
public function let(AlmaClient $client)
{
$this->beConstructedWith($client, 'systemJobStatus');
}

protected function expectRequest($client)
{
$client->getXML('/conf/code-table/systemJobStatus')
->shouldBeCalled()
->willReturn(SpecHelper::getDummyData('codetable_response.json'));
}

public function it_is_lazy(AlmaClient $client)
{
SpecHelper::expectNoRequests($client);
$this->shouldHaveType(CodeTable::class);
}

public function it_fetches_record_data_when_needed(AlmaClient $client)
{
$this->expectRequest($client);

$this->name->('systemJobStatus');
$this->subSystem->value->shouldBe('INFRA');
}

public function it_can_exist(AlmaClient $client)
{
$this->expectRequest($client);

$this->exists()->shouldBe(true);
}
}
40 changes: 40 additions & 0 deletions spec/Conf/CodeTablesSpec.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

namespace spec\Scriptotek\Alma\CodeTables;

use PhpSpec\ObjectBehavior;
use Prophecy\Argument;
use Scriptotek\Alma\Conf\CodeTable;
use Scriptotek\Alma\Client as AlmaClient;
use spec\Scriptotek\Alma\SpecHelper;

class CodeTablesSpec extends ObjectBehavior
{
public function let(AlmaClient $client)
{
$this->beConstructedWith($client);
}

public function it_provides_a_lazy_interface_to_codetable_objects(AlmaClient $client)
{
SpecHelper::expectNoRequests($client);

$ctid = 'myCodeTable'; // str_random();
$bib = $this->get($ctid);

$bib->shouldHaveType(CodeTable::class);
$bib->code->shouldBe($ctid);
}

public function it_provides_a_lazy_array_interface_to_codetable_objects(AlmaClient $client)
{
SpecHelper::expectNoRequests($client);

$ctid = 'myCodeTable'; // str_random();
$ct = $this[$ctid];

$ct->shouldHaveType(CodeTable::class);
$ct->code->shouldBe($ctid);
}

}
109 changes: 109 additions & 0 deletions spec/data/codetable_response.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
{
"name": "systemJobStatus",
"description": "System Job Status",
"sub_system": {
"value": "INFRA",
"desc": "Infra"
},
"patron_facing": true,
"language": {
"value": "en",
"desc": "English"
},
"scope": {
"institution_id": {
"value": "01MY_INST",
"desc": "My Institution"
},
"library_id": {
"value": "",
"desc": ""
}
},
"row": [
{
"code": "QUEUED",
"description": "Queued",
"default": false,
"enabled": true
},
{
"code": "PENDING",
"description": "Pending",
"default": false,
"enabled": true
},
{
"code": "INITIALIZING",
"description": "Initializing",
"default": false,
"enabled": true
},
{
"code": "RUNNING",
"description": "Running",
"default": false,
"enabled": true
},
{
"code": "MANUAL_HANDLING_REQUIRED",
"description": "Manual Handling Required",
"default": false,
"enabled": true
},
{
"code": "FINALIZING",
"description": "Finalizing",
"default": false,
"enabled": true
},
{
"code": "COMPLETED_SUCCESS",
"description": "Completed Successfully",
"default": false,
"enabled": true
},
{
"code": "COMPLETED_NO_BULKS",
"description": "Completed with no Bulks",
"default": false,
"enabled": true
},
{
"code": "COMPLETED_FAILED",
"description": "Completed with Errors",
"default": false,
"enabled": true
},
{
"code": "FAILED",
"description": "Failed",
"default": false,
"enabled": true
},
{
"code": "COMPLETED_WARNING",
"description": "Completed with Warnings",
"default": false,
"enabled": true
},
{
"code": "USER_ABORTED",
"description": "Aborted by User",
"default": false,
"enabled": true
},
{
"code": "SYSTEM_ABORTED",
"description": "Aborted by System",
"default": false,
"enabled": true
},
{
"code": "SKIPPED",
"description": "Skipped",
"default": false,
"enabled": true
}
]
}

0 comments on commit fcd101a

Please sign in to comment.