]> git.localhorst.tv Git - alttp.git/blobdiff - tests/Unit/Models/ChannelTest.php
some guessing game fixes
[alttp.git] / tests / Unit / Models / ChannelTest.php
diff --git a/tests/Unit/Models/ChannelTest.php b/tests/Unit/Models/ChannelTest.php
new file mode 100644 (file)
index 0000000..a5bbb34
--- /dev/null
@@ -0,0 +1,108 @@
+<?php
+
+namespace Tests\Unit\Models;
+
+use App\Models\Channel;
+use App\Models\GuessingWinner;
+use PHPUnit\Framework\TestCase;
+
+class ChannelTest extends TestCase {
+
+       public function test_guessing_solutions() {
+               $channel = new Channel();
+               $channel->guessing_type = 'gtbk';
+
+               $this->assertTrue($channel->isValidGuess('1'));
+               $this->assertTrue($channel->isValidGuess('22'));
+               $this->assertTrue($channel->isValidGuess('3 '));
+               $this->assertTrue($channel->isValidGuess('vier 4Head'));
+               $this->assertTrue($channel->isValidGuess('Vier 4Head'));
+               $this->assertTrue($channel->isValidGuess('roodyo1Gtbigkey'));
+
+               $this->assertFalse($channel->isValidGuess('1:22:56'));
+               $this->assertFalse($channel->isValidGuess('torch'));
+       }
+
+       public function test_guessing_scoring() {
+               $channel = new Channel();
+               $channel->guessing_type = 'gtbk';
+               $channel->guessing_settings = [
+                       'gtbk' => [
+                               'points_exact_first' => 5,
+                               'points_exact_other' => 4,
+                               'points_close_first' => 3,
+                               'points_close_other' => 2,
+                               'points_close_max' => 5,
+                       ],
+               ];
+
+               $this->assertEquals(5, $channel->scoreGuessing('3', '3', true));
+               $this->assertEquals(4, $channel->scoreGuessing('12', '12', false));
+               $this->assertEquals(3, $channel->scoreGuessing('15', '14', true));
+               $this->assertEquals(2, $channel->scoreGuessing('8', '6', false));
+               $this->assertEquals(0, $channel->scoreGuessing('7', '1', true));
+               $this->assertEquals(0, $channel->scoreGuessing('3', '22', false));
+
+               $this->assertEquals(5, $channel->scoreGuessing('2', 'roodyo1Gtbigkey', true));
+               $this->assertEquals(5, $channel->scoreGuessing('4', 'Vier 4Head', true));
+               $this->assertEquals(5, $channel->scoreGuessing('5', '5 ', true));
+       }
+
+       public function test_guessing_winners() {
+               $channel = new Channel();
+               $channel->guessing_type = 'gtbk';
+               $channel->guessing_settings = [
+                       'gtbk' => [
+                               'close_winners_message' => 'within {distance}: {names}',
+                               'no_winners_message' => 'no winners',
+                               'winners_message' => 'winners: {names}',
+                       ],
+               ];
+
+               $this->assertEquals('no winners', $channel->listGuessingWinners([]));
+
+               $winners = [];
+               $winner = new GuessingWinner();
+               $winner->uname = 'Horstie';
+               $winner->guess = '3';
+               $winner->solution = '3';
+               $winner->score = 1;
+               $winners[] = $winner;
+
+               $this->assertEquals('winners: Horstie', $channel->listGuessingWinners($winners));
+
+               $winner = new GuessingWinner();
+               $winner->uname = 'Borstie';
+               $winner->guess = '3';
+               $winner->solution = '3';
+               $winner->score = 1;
+               $winners[] = $winner;
+
+               $channel->languages = ['de'];
+               $this->assertEquals('winners: Horstie und Borstie', $channel->listGuessingWinners($winners));
+               $channel->languages = ['en'];
+               $this->assertEquals('winners: Horstie and Borstie', $channel->listGuessingWinners($winners));
+
+               $winners[0]->guess = '1';
+               $winners[1]->guess = '5';
+
+
+               $channel->languages = ['de'];
+               $this->assertEquals('within 2: Horstie und Borstie', $channel->listGuessingWinners($winners));
+               $channel->languages = ['en'];
+               $this->assertEquals('within 2: Horstie and Borstie', $channel->listGuessingWinners($winners));
+
+               $channel->guessing_settings = [
+                       'gtbk' => [
+                               'no_winners_message' => 'no winners',
+                               'winners_message' => 'winners: {names}',
+                       ],
+               ];
+
+               $channel->languages = ['de'];
+               $this->assertEquals('winners: Horstie und Borstie', $channel->listGuessingWinners($winners));
+               $channel->languages = ['en'];
+               $this->assertEquals('winners: Horstie and Borstie', $channel->listGuessingWinners($winners));
+       }
+
+}