Make sure verse references are capitalized correctly.
This commit is contained in:
parent
5d69a0e89f
commit
559a774d88
|
@ -3,6 +3,7 @@ namespace App\Handlers;
|
|||
|
||||
use App\Book;
|
||||
use App\Chapter;
|
||||
use App\Helpers\Traits\BookTitleHelperTrait;
|
||||
use App\Word;
|
||||
use App\Verse;
|
||||
use DOMDocument;
|
||||
|
@ -20,7 +21,7 @@ use Symfony\Component\Console\Output\OutputInterface;
|
|||
*/
|
||||
class UlbXmlImportHandler
|
||||
{
|
||||
use BookXmlFilesTrait;
|
||||
use BookXmlFilesTrait, BookTitleHelperTrait;
|
||||
|
||||
const REPO_FOLDER = '/ulb/';
|
||||
|
||||
|
@ -472,39 +473,6 @@ class UlbXmlImportHandler
|
|||
return $document;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $bookTitle
|
||||
* @return string
|
||||
*/
|
||||
protected function prepareBookName(string $bookTitle) : string
|
||||
{
|
||||
$parts = $this->parseBookTitle($bookTitle);
|
||||
return !isset($parts[1]) ? ucfirst($parts[0]) : $parts[0] . " " . ucfirst($parts[1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $bookTitle
|
||||
* @return string
|
||||
*/
|
||||
protected function prepareBookId(string $bookTitle) : string
|
||||
{
|
||||
$parts = $this->parseBookTitle($bookTitle);
|
||||
return !isset($parts[1]) ? strtolower($parts[0]) : $parts[0] . " " . strtolower($parts[1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $bookTitle
|
||||
* @return array|string[]
|
||||
*/
|
||||
protected function parseBookTitle(string $bookTitle) : array
|
||||
{
|
||||
if (is_numeric(substr($bookTitle, 0, 1))) {
|
||||
return [ substr($bookTitle, 0, 1), substr($bookTitle, 1) ];
|
||||
} else {
|
||||
return [ $bookTitle ];
|
||||
}
|
||||
}
|
||||
|
||||
protected function write($message, $newline)
|
||||
{
|
||||
if ($this->output !== null && $this->output instanceof OutputStyle) {
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
namespace App\Helpers\Traits;
|
||||
|
||||
/**
|
||||
* This trait provides some helper methods for dealing with Book names, titles, etc.
|
||||
*
|
||||
* BookTitleHelperTrait.php
|
||||
*
|
||||
* @author: Leonard Smith <leonard@acornwebconsultants.com>
|
||||
* Date: 5/4/21
|
||||
* Time: 11:13 AM
|
||||
*/
|
||||
trait BookTitleHelperTrait
|
||||
{
|
||||
/**
|
||||
* @param string $bookTitle
|
||||
* @return string
|
||||
*/
|
||||
protected function prepareBookName(string $bookTitle) : string
|
||||
{
|
||||
$parts = $this->parseBookTitle($bookTitle);
|
||||
return !isset($parts[1]) ? ucfirst($parts[0]) : $parts[0] . " " . ucfirst($parts[1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $bookTitle
|
||||
* @return string
|
||||
*/
|
||||
protected function prepareBookId(string $bookTitle) : string
|
||||
{
|
||||
$parts = $this->parseBookTitle($bookTitle);
|
||||
return !isset($parts[1]) ? strtolower($parts[0]) : $parts[0] . " " . strtolower($parts[1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $bookTitle
|
||||
* @return array|string[]
|
||||
*/
|
||||
protected function parseBookTitle(string $bookTitle) : array
|
||||
{
|
||||
if (is_numeric(substr($bookTitle, 0, 1))) {
|
||||
return [ substr($bookTitle, 0, 1), ltrim(substr($bookTitle, 1)) ];
|
||||
} else {
|
||||
return [ $bookTitle ];
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,10 +2,13 @@
|
|||
|
||||
namespace App;
|
||||
|
||||
use App\Helpers\Traits\BookTitleHelperTrait;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Verse extends Model
|
||||
{
|
||||
use BookTitleHelperTrait;
|
||||
|
||||
public $incrementing = false;
|
||||
|
||||
public $fillable = [
|
||||
|
@ -42,6 +45,6 @@ class Verse extends Model
|
|||
{
|
||||
$parts = explode('-', $this->id);
|
||||
|
||||
return ucfirst($parts[0]) . ' ' . $parts[1] . ':' . $parts[2];
|
||||
return $this->prepareBookName(ucfirst($parts[0])) . ' ' . $parts[1] . ':' . $parts[2];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,15 +2,16 @@
|
|||
namespace Tests\Unit;
|
||||
|
||||
use App\Handlers\UlbXmlImportHandler;
|
||||
use App\Helpers\Traits\BookTitleHelperTrait;
|
||||
use Tests\TestCase;
|
||||
|
||||
class UlbXmlImportHandlerTest extends TestCase
|
||||
class BookTitleHelperTraitText extends TestCase
|
||||
{
|
||||
public function testThatParseBookTitleHandlesNumberedBooksCorrectly()
|
||||
{
|
||||
$handler = new UlbXmlImportHandler();
|
||||
$handler = new BookTitleTester();
|
||||
|
||||
$reflection_class = new \ReflectionClass(UlbXmlImportHandler::class);
|
||||
$reflection_class = new \ReflectionClass(BookTitleTester::class);
|
||||
$method = $reflection_class->getMethod('parseBookTitle');
|
||||
$method->setAccessible(true);
|
||||
|
||||
|
@ -23,9 +24,9 @@ class UlbXmlImportHandlerTest extends TestCase
|
|||
|
||||
public function testThatPrepareBookNameReturnsProperlyFormattedName()
|
||||
{
|
||||
$handler = new UlbXmlImportHandler();
|
||||
$handler = new BookTitleTester();
|
||||
|
||||
$reflection_class = new \ReflectionClass(UlbXmlImportHandler::class);
|
||||
$reflection_class = new \ReflectionClass(BookTitleTester::class);
|
||||
$method = $reflection_class->getMethod('prepareBookName');
|
||||
$method->setAccessible(true);
|
||||
|
||||
|
@ -35,4 +36,21 @@ class UlbXmlImportHandlerTest extends TestCase
|
|||
$result = $method->invoke($handler, 'john');
|
||||
$this->assertEquals('John', $result);
|
||||
}
|
||||
|
||||
public function testThatWhitespaceBetweenNumberAndTextDoesNotBreakCapitalization()
|
||||
{
|
||||
$handler = new BookTitleTester();
|
||||
|
||||
$reflection_class = new \ReflectionClass(BookTitleTester::class);
|
||||
$method = $reflection_class->getMethod('prepareBookName');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$result = $method->invoke($handler, '1 corinthians');
|
||||
$this->assertEquals('1 Corinthians', $result);
|
||||
}
|
||||
}
|
||||
|
||||
class BookTitleTester
|
||||
{
|
||||
use BookTitleHelperTrait;
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
namespace Tests\Unit;
|
||||
|
||||
use App\Verse;
|
||||
use Tests\TestCase;
|
||||
/**
|
||||
* VerseModelTest.php
|
||||
*
|
||||
* @author: Leonard Smith <leonard@acornwebconsultants.com>
|
||||
* Date: 5/4/21
|
||||
* Time: 11:34 AM
|
||||
*/
|
||||
class VerseModelTest extends TestCase
|
||||
{
|
||||
public function testThatVerseReferenceIsCorrectlyReturnedForNumberedBooks()
|
||||
{
|
||||
$model = new Verse();
|
||||
$model->id = '1 peter-1-1';
|
||||
$model->name = '1';
|
||||
$model->chapter_id = '1 peter-1';
|
||||
|
||||
$this->assertEquals('1 Peter 1:1', $model->reference);
|
||||
}
|
||||
|
||||
public function testThatVerseReferenceIsCorrectlyReturnedForUnnumberedBooks()
|
||||
{
|
||||
$model = new Verse();
|
||||
$model->id = 'matthew-28-19';
|
||||
$model->name = '1';
|
||||
$model->chapter_id = 'matthew-28';
|
||||
|
||||
$this->assertEquals('Matthew 28:19', $model->reference);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue