Skip to content

Commit

Permalink
Incorporate all current quests into quest stats
Browse files Browse the repository at this point in the history
Add tests for this and refactor.
  • Loading branch information
ngm committed Jun 15, 2021
1 parent 88fd423 commit 06d1ff8
Show file tree
Hide file tree
Showing 5 changed files with 171 additions and 24 deletions.
63 changes: 44 additions & 19 deletions app/Http/Controllers/MicrotaskingController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

namespace App\Http\Controllers;

use App\Faultcat;
use App\Misccat;
use App\Mobifix;
use App\MobifixOra;
use App\PrintcatOra;
use App\TabicatOra;

use App\Services\DiscourseService;
use Auth;
use DB;
Expand All @@ -10,6 +17,20 @@

class MicrotaskingController extends Controller
{
protected $quests;

public function __construct()
{
$this->quests = [
new Faultcat,
new Misccat,
new Mobifix,
new MobifixOra,
new PrintcatOra,
new TabicatOra
];
}

public function index(DiscourseService $discourseService)
{
if (Auth::check()) {
Expand All @@ -27,7 +48,8 @@ public function index(DiscourseService $discourseService)
$tag = config('restarters.microtasking.discussion_tag');

return view('microtasking.dashboard', [
'totalContributions' => $this->getTotalContributions(),
'totalQuests' => $this->getTotalContributions()['quests'],
'totalContributions' => $this->getTotalContributions()['contributions'],
'currentUserQuests' => $currentUserQuests,
'currentUserContributions' => $currentUserContributions,
'topics' => $discourseService->getDiscussionTopics($tag, 5),
Expand All @@ -38,33 +60,36 @@ public function index(DiscourseService $discourseService)

private function getUserContributions($userId)
{
$faultCatContributions = DB::select('select count(*) as total from devices_faults_opinions where user_id = :userId', ['userId' => $userId])[0]->total;
$miscCatContributions = DB::select('select count(*) as total from devices_misc_opinions where user_id = :userId', ['userId' => $userId])[0]->total;
$mobifixContributions = DB::select('select count(*) as total from devices_faults_mobiles_opinions where user_id = :userId', ['userId' => $userId])[0]->total;
$userQuests = 0;
$userContributions = 0;

$quests = 0;
if ($faultCatContributions > 0) {
$quests++;
}
if ($miscCatContributions > 0) {
$quests++;
}
if ($mobifixContributions > 0) {
$quests++;
foreach ($this->quests as $quest) {
$questContributions = $quest->where('user_id', $userId)->count();
if ($questContributions > 0) {
$userQuests++;
$userContributions += $questContributions;
}
}

return [
'quests' => $quests,
'contributions' => $faultCatContributions + $miscCatContributions + $mobifixContributions
'quests' => $userQuests,
'contributions' => $userContributions
];
}

private function getTotalContributions()
{
$faultCatContributions = DB::select('select count(*) as total from devices_faults_opinions')[0]->total;
$miscCatContributions = DB::select('select count(*) as total from devices_misc_opinions')[0]->total;
$mobifixContributions = DB::select('select count(*) as total from devices_faults_mobiles_opinions')[0]->total;
$quests = 0;
$contributions = 0;

foreach ($this->quests as $quest) {
$quests++;
$contributions += $quest->count();
}

return $faultCatContributions + $miscCatContributions + $mobifixContributions;
return [
'quests' => $quests,
'contributions' => $contributions
];
}
}
5 changes: 5 additions & 0 deletions resources/js/components/MicrotaskingPage.vue
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
:active-quest="activeQuest"
/>
<MicrotaskingVolunteering
:total-quests="totalQuests"
:total-contributions="totalContributions"
:current-user-quests="currentUserQuests"
:current-user-contributions="currentUserContributions"
Expand Down Expand Up @@ -48,6 +49,10 @@ export default {
type: String,
required: true
},
totalQuests: {
type: Number,
required: true
},
totalContributions: {
type: Number,
required: true
Expand Down
11 changes: 6 additions & 5 deletions resources/js/components/MicrotaskingVolunteering.vue
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
{{ __('microtasking.volunteering.all_volunteer_contributions') }}
</b-td>
<b-td class="text-center">{{ totalContributions.toLocaleString() }}</b-td>
<b-td class="text-center">{{ __('microtasking.volunteering.all_quests') }}</b-td>
<b-td class="text-center">{{ __('microtasking.volunteering.my_quests', { value: totalQuests }) }}</b-td>
</b-tr>
<b-tr>
<b-td class="text-center">
Expand All @@ -56,7 +56,7 @@
</b-td>
<template v-if="isLoggedIn">
<b-td class="text-center">{{ currentUserContributions }}</b-td>
<b-td class="text-center">{{ translatedMyQuests }}</b-td>
<b-td class="text-center">{{ __('microtasking.volunteering.my_quests', { value: currentUserQuests }) }}</b-td>
</template>
<template v-else>
<b-td class="text-center" colspan="2"><a class="btn btn-primary" href="/about">{{ __('microtasking.volunteering.join') }}</a></b-td>
Expand All @@ -75,6 +75,10 @@ import CollapsibleSection from './CollapsibleSection'
export default {
components: {CollapsibleSection},
props: {
totalQuests: {
type: Number,
required: true
},
totalContributions: {
type: Number,
required: true
Expand All @@ -93,9 +97,6 @@ export default {
}
},
computed: {
translatedMyQuests() {
return this.$lang.get('microtasking.volunteering.my_quests', { value: this.currentUserQuests })
},
openQuests: function () {
// Note: if we continue with more quests, and open/closed quests,
// we will likely have a 'quests' table.
Expand Down
1 change: 1 addition & 0 deletions resources/views/microtasking/dashboard.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
<MicrotaskingPage
csrf="{{ csrf_token() }}"
active-quest="{{ $activeQuest }}"
:total-quests="{{ $totalQuests }}"
:total-contributions="{{ $totalContributions }}"
:current-user-quests="{{ $currentUserQuests }}"
:current-user-contributions="{{ $currentUserContributions }}"
Expand Down
115 changes: 115 additions & 0 deletions tests/Feature/Microtasks/Workbench/ContributionsTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
<?php

namespace Tests\Feature\Microtasks\Workbench;

use App\Faultcat;
use App\Misccat;
use App\Mobifix;
use App\MobifixOra;
use App\PrintcatOra;
use App\TabicatOra;
use App\User;

use DB;
use Hash;
use Mockery;
use Tests\TestCase;


class ContributionsTest extends TestCase
{
protected $user1;
protected $user2;

public function setUp()
{
parent::setUp();
Faultcat::truncate();
Misccat::truncate();
Mobifix::truncate();
MobifixOra::truncate();
PrintcatOra::truncate();
TabicatOra::truncate();

$this->userWithContributions = factory(User::class)->state('Restarter')->create();
$this->anotherUserWithContributions = factory(User::class)->state('Restarter')->create();
$this->userNoContributions = factory(User::class)->state('Restarter')->create();

// 3 contributions, 3 quests.
FaultCat::insert([
'iddevices' => 1,
'fault_type' => 'Performance',
'user_id' => $this->userWithContributions->id,
]);
PrintcatOra::insert([
'id_ords' => 'restart_1',
'fault_type_id' => 1,
'user_id' => $this->userWithContributions->id,
]);
TabicatOra::insert([
'id_ords' => 'restart_1',
'fault_type_id' => 1,
'user_id' => $this->userWithContributions->id,
]);

// 2 contributions, 1 quest.
TabicatOra::insert([
'id_ords' => 'restart_2',
'fault_type_id' => 1,
'user_id' => $this->anotherUserWithContributions->id,
]);
TabicatOra::insert([
'id_ords' => 'restart_3',
'fault_type_id' => 1,
'user_id' => $this->anotherUserWithContributions->id,
]);
}

public function testLoggedInNoContributions()
{
$this->actingAs($this->userNoContributions);
$response = $this->get('/workbench');

$props = $this->getVueProperties($response)[0];
$this->assertEquals(0, $props[':current-user-quests']);
$this->assertEquals(0, $props[':current-user-contributions']);
}

public function testLoggedInSomeContributions()
{
$this->actingAs($this->userWithContributions);
$response = $this->get('/workbench');

$props = $this->getVueProperties($response)[0];
$this->assertEquals(3, $props[':current-user-quests']);
$this->assertEquals(3, $props[':current-user-contributions']);
}

public function testLoggedInMultipleContributionsOneQuest()
{
$this->actingAs($this->anotherUserWithContributions);
$response = $this->get('/workbench');

$props = $this->getVueProperties($response)[0];
$this->assertEquals(1, $props[':current-user-quests']);
$this->assertEquals(2, $props[':current-user-contributions']);
}

public function testLoggedOut()
{
$response = $this->get('/workbench');

$props = $this->getVueProperties($response)[0];
$this->assertEquals(0, $props[':current-user-quests']);
$this->assertEquals(0, $props[':current-user-contributions']);
}

public function testTotals()
{
$response = $this->get('/workbench');

$props = $this->getVueProperties($response)[0];
$this->assertEquals(6, $props[':total-quests']);
$this->assertEquals(5, $props[':total-contributions']);
}
}

0 comments on commit 06d1ff8

Please sign in to comment.