mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2025-12-12 04:12:13 +00:00
commit
fb3853835e
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,3 +2,4 @@ bin
|
||||
obj
|
||||
*.sln.DotSettings.user
|
||||
.vs
|
||||
vendor
|
||||
|
||||
51
php7/README.md
Normal file
51
php7/README.md
Normal file
@ -0,0 +1,51 @@
|
||||
Requirements
|
||||
------------
|
||||
|
||||
**PHP 7:**
|
||||
|
||||
This is usually bundled with your operating system, or fetchable using a package manager like `apt` or `homebrew`.
|
||||
|
||||
Windows users can find the latest version here: https://windows.php.net/download#php-7.3
|
||||
|
||||
If you want to compile from source code, that can be found here: https://www.php.net/downloads.php
|
||||
|
||||
**Composer:**
|
||||
|
||||
Composer is PHP's main package and dependency management tool.
|
||||
|
||||
It can be downloaded here: https://getcomposer.org/download/
|
||||
|
||||
Getting Started
|
||||
---------------
|
||||
|
||||
To begin the kata, install the dependencies and run `phpunit`:
|
||||
|
||||
```
|
||||
cd php7
|
||||
composer install
|
||||
vendor/bin/phpunit
|
||||
```
|
||||
|
||||
If the "install" command does not work, try running `composer update` instead.
|
||||
This will tell composer that it has permission to look for a newer version of
|
||||
its dependencies.
|
||||
|
||||
If things are still not cooperating, you can try this extreme approach:
|
||||
|
||||
```
|
||||
composer remove phpunit/phpunit
|
||||
composer require phpunit/phpunit
|
||||
```
|
||||
|
||||
To exercise the code outside of phpunit, for example to visually confirm that it is working,
|
||||
use the `texttest_fixture` script:
|
||||
|
||||
```
|
||||
php fixtures/texttest_fixture.php
|
||||
```
|
||||
|
||||
Tips
|
||||
----
|
||||
|
||||
PHPUnit has a very thorough reference manual. It would be particularly useful to explore the
|
||||
[Data Providers](https://phpunit.readthedocs.io/en/8.1/writing-tests-for-phpunit.html#data-providers) section.
|
||||
10
php7/composer.json
Normal file
10
php7/composer.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^8.1"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"App\\": "src/"
|
||||
}
|
||||
}
|
||||
}
|
||||
1491
php7/composer.lock
generated
Normal file
1491
php7/composer.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
38
php7/fixtures/texttest_fixture.php
Normal file
38
php7/fixtures/texttest_fixture.php
Normal file
@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
require_once __DIR__ . '/../vendor/autoload.php';
|
||||
|
||||
use App\GildedRose;
|
||||
use App\Item;
|
||||
|
||||
echo "OMGHAI!\n";
|
||||
|
||||
$items = array(
|
||||
new Item('+5 Dexterity Vest', 10, 20),
|
||||
new Item('Aged Brie', 2, 0),
|
||||
new Item('Elixir of the Mongoose', 5, 7),
|
||||
new Item('Sulfuras, Hand of Ragnaros', 0, 80),
|
||||
new Item('Sulfuras, Hand of Ragnaros', -1, 80),
|
||||
new Item('Backstage passes to a TAFKAL80ETC concert', 15, 20),
|
||||
new Item('Backstage passes to a TAFKAL80ETC concert', 10, 49),
|
||||
new Item('Backstage passes to a TAFKAL80ETC concert', 5, 49),
|
||||
// this conjured item does not work properly yet
|
||||
new Item('Conjured Mana Cake', 3, 6)
|
||||
);
|
||||
|
||||
$app = new GildedRose($items);
|
||||
|
||||
$days = 2;
|
||||
if (count($argv) > 1) {
|
||||
$days = (int) $argv[1];
|
||||
}
|
||||
|
||||
for ($i = 0; $i < $days; $i++) {
|
||||
echo("-------- day $i --------\n");
|
||||
echo("name, sellIn, quality\n");
|
||||
foreach ($items as $item) {
|
||||
echo $item . PHP_EOL;
|
||||
}
|
||||
echo PHP_EOL;
|
||||
$app->updateQuality();
|
||||
}
|
||||
19
php7/phpunit.xml
Normal file
19
php7/phpunit.xml
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/3.7/phpunit.xsd"
|
||||
backupGlobals="false"
|
||||
colors="false"
|
||||
verbose="true">
|
||||
|
||||
<testsuites>
|
||||
<testsuite name="AllTests">
|
||||
<directory suffix="Test.php">test</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
|
||||
<filter>
|
||||
<whitelist>
|
||||
<directory>src</directory>
|
||||
</whitelist>
|
||||
</filter>
|
||||
</phpunit>
|
||||
65
php7/src/GildedRose.php
Normal file
65
php7/src/GildedRose.php
Normal file
@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
final class GildedRose {
|
||||
|
||||
private $items = [];
|
||||
|
||||
public function __construct($items) {
|
||||
$this->items = $items;
|
||||
}
|
||||
|
||||
public function updateQuality() {
|
||||
foreach ($this->items as $item) {
|
||||
if ($item->name != 'Aged Brie' and $item->name != 'Backstage passes to a TAFKAL80ETC concert') {
|
||||
if ($item->quality > 0) {
|
||||
if ($item->name != 'Sulfuras, Hand of Ragnaros') {
|
||||
$item->quality = $item->quality - 1;
|
||||
} else {
|
||||
$item->quality = 80;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ($item->quality < 50) {
|
||||
$item->quality = $item->quality + 1;
|
||||
if ($item->name == 'Backstage passes to a TAFKAL80ETC concert') {
|
||||
if ($item->sell_in < 11) {
|
||||
if ($item->quality < 50) {
|
||||
$item->quality = $item->quality + 1;
|
||||
}
|
||||
}
|
||||
if ($item->sell_in < 6) {
|
||||
if ($item->quality < 50) {
|
||||
$item->quality = $item->quality + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($item->name != 'Sulfuras, Hand of Ragnaros') {
|
||||
$item->sell_in = $item->sell_in - 1;
|
||||
}
|
||||
|
||||
if ($item->sell_in < 0) {
|
||||
if ($item->name != 'Aged Brie') {
|
||||
if ($item->name != 'Backstage passes to a TAFKAL80ETC concert') {
|
||||
if ($item->quality > 0) {
|
||||
if ($item->name != 'Sulfuras, Hand of Ragnaros') {
|
||||
$item->quality = $item->quality - 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$item->quality = $item->quality - $item->quality;
|
||||
}
|
||||
} else {
|
||||
if ($item->quality < 50) {
|
||||
$item->quality = $item->quality + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
21
php7/src/Item.php
Normal file
21
php7/src/Item.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
final class Item {
|
||||
|
||||
public $name;
|
||||
public $sell_in;
|
||||
public $quality;
|
||||
|
||||
function __construct($name, $sell_in, $quality) {
|
||||
$this->name = $name;
|
||||
$this->sell_in = $sell_in;
|
||||
$this->quality = $quality;
|
||||
}
|
||||
|
||||
public function __toString() {
|
||||
return "{$this->name}, {$this->sell_in}, {$this->quality}";
|
||||
}
|
||||
}
|
||||
|
||||
12
php7/test/GildedRoseTest.php
Normal file
12
php7/test/GildedRoseTest.php
Normal file
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
class GildedRoseTest extends \PHPUnit\Framework\TestCase {
|
||||
public function testFoo() {
|
||||
$items = [new Item("foo", 0, 0)];
|
||||
$gildedRose = new GildedRose($items);
|
||||
$gildedRose->updateQuality();
|
||||
$this->assertEquals("fixme", $items[0]->name);
|
||||
}
|
||||
}
|
||||
2
php7/test/bootstrap.php
Normal file
2
php7/test/bootstrap.php
Normal file
@ -0,0 +1,2 @@
|
||||
<?php
|
||||
set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__.'/../src');
|
||||
Loading…
Reference in New Issue
Block a user