mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-10-13 17:49:25 +00:00
20 files changed
+1710
No files matched your search
@@ -2,3 +2,4 @@ bin
|
|||||||
obj
|
obj
|
||||||
*.sln.DotSettings.user
|
*.sln.DotSettings.user
|
||||||
.vs
|
.vs
|
||||||
|
vendor
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -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.
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^8.1"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"App\\": "src/"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Generated
+1491
File diff suppressed because it is too large.
Load diff
@@ -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();
|
||||||
|
}
|
||||||
@@ -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>
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -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}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
<?php
|
||||||
|
set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__.'/../src');
|
||||||
Reference in new issue
Block a user