Tefito

Akohia me pehea te mahi whakamatautau i Laravel me nga tauira ngawari, ma te whakamahi i te PHPUnit me te PEST

Ina tae mai ki nga whakamatautau aunoa, ki nga whakamatautau wae ranei, i roto i tetahi reo whakamaoritanga, e rua nga whakaaro whakahē:

  • Te moumou taima
  • Kaore e taea e koe me te kore

Na, me tenei tuhinga ka ngana taatau ki te whakapae i nga mea o mua, ina koa ma te whakaatu i te ngawari o te tiimata me te whakamatautau aunoa i Laravel.

Tuatahi me korero tatou mo te "he aha", katahi ka kite i etahi tauira o te pehea.

He aha tatou e hiahia ana ki te whakamatautau aunoa

Ka whakahaerehia e nga whakamatautau aunoa etahi waahanga o te waehere me te whakaatu i nga hapa. Koinei te huarahi ngawari ki te whakaahua i a raatau. Whakaarohia te huri i tetahi waahanga hou i roto i tetahi taupānga, katahi ka haere tetahi kaiawhina karetao whaiaro ki te whakamatau a-ringa i te waahanga hou, me te whakamatautau ano mena kaore te waehere hou i pakaru i tetahi o nga ahuatanga tawhito.

Ko te painga nui tenei: te whakamatautau aunoa i nga ahuatanga katoa. He mahi ano tenei, engari ki te kore koe e kii ki te "robot" ki te mahi, me mahi a ringa ano, tika? 

Ka taea ranei te tuku i nga ahuatanga hou me te kore e whakamatau mena ka mahi, me te tumanako ka tukuna e nga kaiwhakamahi nga pepeke.

He maha nga painga ka taea e nga whakamatautau aunoa:

  • Whakaorangia te wa whakamatautau a-ringa;
  • Ka taea e koe te penapena wa mo te mahi hou kua whakatinanahia me nga mahi whakakotahi ma te karo i te whakahekenga;
  • Whakareatia tenei painga ki nga ahuatanga hou katoa me nga ahuatanga katoa kua whakatinanahia;
  • Ko nga tohu e toru o mua e pa ana ki ia putanga hou;
  • ...

Whakamātauria ki te whakaaro i to tono i roto i te tau, e rua ranei, me nga kaiwhakawhanake hou i runga i te roopu karekau e mohio ki te waehere i tuhia i nga tau o mua, me pehea ranei te whakamatautau. 

Ko o maatau whakamatautau aunoa tuatahi

Hei mahi i te tuatahi whakamatautau aunoa i Laravel, kaore koe e hiahia ki te tuhi i tetahi waehere. Ae, tika taau korero. Ko nga mea katoa kua oti te whakarite me te whakarite i mua i te whakaurungadefio Laravel, tae atu ki te tauira taketake tuatahi.

Ka taea e koe te ngana ki te whakauru i tetahi kaupapa Laravel ka whakahaere tonu i nga whakamatautau tuatahi:

laravel new project
cd project
php artisan test

Koinei te hua i roto i to papatohu:

Mena ka titiro tatou ki te muadefite ahiahi o Laravel /tests, e rua nga konae:

whakamātautau/Ahuatanga/ExampleTest.php :

class ExampleTest extends TestCase
{
    public function test_the_application_returns_a_successful_response()
    {
        $response = $this->get('/');
 
        $response->assertStatus(200);
    }
}

Kare koe e hiahia ki te mohio ki tetahi wetereo kia mohio ai koe ki nga mea kei konei: utaina te wharangi kaainga ka tirohia mena ko te waehere mana HTTP è "200 OK".

E mohiotia ana ko te ingoa tikanga test_the_application_returns_a_successful_response() ka noho hei tuhinga panui ina tiro koe i nga hua whakamatautau, ma te whakakapi noa i te tohu tararo ki te mokowā.

tests/Unit/ExampleTest.php :

class ExampleTest extends TestCase
{
    public function test_that_true_is_true()
    {
        $this->assertTrue(true);
    }
}

He ahua horihori noa iho, ka tirohia mena he pono tenei? 

Ka korero motuhake tatou mo nga whakamatautau wae a muri ake nei. I tenei wa, me maarama koe he aha te nuinga o nga mahi i ia whakamatautau.

  • Ia kōnae whakamātautau kei te kōpaki /tests he akomanga PHP e whakawhānui ana i te TestCase o PHPUnit
  • I roto i ia akomanga, ka taea e koe te hanga tikanga maha, ko te tikanga kotahi te tikanga mo tetahi ahuatanga hei whakamatautau
  • I roto i ia tikanga e toru nga mahi: te whakarite i te ahuatanga, katahi ka mahi katahi ka manatoko (whakau) mena kua rite te hua ki te tumanako.

Ko te hanganga, koira noa nga mea e hiahia ana koe ki te mohio, ko era atu mea katoa kei runga i nga mea tika e hiahia ana koe ki te whakamatautau.

Hei whakaputa i te karaehe whakamatautau kau, whakahaere noa i tenei whakahau:

php artisan make:test HomepageTest

Ka hangaia te konae tests/Feature/HomepageTest.php:

class HomepageTest extends TestCase
{
    // Replace this method with your own ones
    public function test_example()
    {
        $response = $this->get('/');
 
        $response->assertStatus(200);
    }
}

Inaianei kia kite tatou ka aha mena ka rahua te waehere whakamatautau i Laravel

Inaianei kia kite tatou ka aha mena kaore nga whakapae whakamatautau e whakahoki mai i te hua e tumanakohia ana.

Me huri nga tauira whakamatautau ki tenei:

class ExampleTest extends TestCase
{
    public function test_the_application_returns_a_successful_response()
    {
        $response = $this->get('/non-existing-url');
 
        $response->assertStatus(200);
    }
}
 
 
class ExampleTest extends TestCase
{
    public function test_that_true_is_false()
    {
        $this->assertTrue(false);
    }
}

Na inaianei, ki te whakahaere tatou i te whakahau php artisan test ano:

 FAIL  Tests\Unit\ExampleTest
⨯ that true is true
 
 FAIL  Tests\Feature\ExampleTest
⨯ the application returns a successful response
 
---
 
• Tests\Unit\ExampleTest > that true is true
Failed asserting that false is true.
 
at tests/Unit/ExampleTest.php:16
   12▕      * @return void
   13▕      */
   14▕     public function test_that_true_is_true()
   15▕     {
➜  16▕         $this->assertTrue(false);
   17▕     }
   18▕ }
   19▕
 
• Tests\Feature\ExampleTest > the application returns a successful response
Expected response status code [200] but received 404.
Failed asserting that 200 is identical to 404.
 
at tests/Feature/ExampleTest.php:19
   15▕     public function test_the_application_returns_a_successful_response()
   16▕     {
   17▕         $response = $this->get('/non-existing-url');
   18▕
➜  19▕         $response->assertStatus(200);
   20▕     }
   21▕ }
   22▕
 
 
Tests:  2 failed
Time:   0.11s

E rua nga whakamatautau i rahua, kua tohua he FAIL, me nga whakamarama kei raro me nga pere e tohu ana ki te rarangi tika o nga whakamatautau i rahua. Ka tohuhia nga hapa penei.

Tauira: Te whakamatautau i te waehere puka rehitatanga i Laravel

Ki te mea he puka ta maatau me whakamatau i nga momo keehi: ka tirohia mena ka rahua me nga raraunga muhu, ka tirohia mena ka angitu me te whakauru tika, aha atu.

Ko te kete timata mana na Laravel Breeze kei roto i te whakamatautau i nga mahi kei roto. Kia titiro tatou ki etahi tauira mai i reira:

tests/Feature/RegistrationTest.php

use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
 
class RegistrationTest extends TestCase
{
    use RefreshDatabase;
 
    public function test_registration_screen_can_be_rendered()
    {
        $response = $this->get('/register');
 
        $response->assertStatus(200);
    }
 
    public function test_new_users_can_register()
    {
        $response = $this->post('/register', [
            'name' => 'Test User',
            'email' => 'test@example.com',
            'password' => 'password',
            'password_confirmation' => 'password',
        ]);
 
        $this->assertAuthenticated();
        $response->assertRedirect(RouteServiceProvider::HOME);
    }
}

I konei e rua nga whakamatautau i roto i te karaehe kotahi, i te mea he hononga enei e rua ki te puka rehitatanga: ka tirohia e tetahi mehemea kua tika te utaina o te puka, ka tirohia e tetahi mena ka pai te mahi o te tukunga.

Kia mohio tatou ki etahi atu tikanga e rua mo te manatoko i te hua, e rua ano nga whakapae: $this->assertAuthenticated()$response->assertRedirect(). Ka taea e koe te tirotiro i nga korero katoa e waatea ana i roto i nga tuhinga mana o PHPUnit e Te Whakautu a Laravel . Kia mahara ka puta etahi korero whanui mo te kaupapa $this, ko etahi e tirotiro ana i nga mea motuhake $responsemai i te waea ara.

Ko tetahi atu mea nui ko te use RefreshDatabase;tauākī, me te whiu, kua kuhu ki runga ake o te akomanga. He mea tika ina pa ana nga mahi whakamatautau ki te paataka raraunga, penei i tenei tauira, ka taapirihia e te takiuru he urunga hou ki te usersripanga pātengi raraunga. Mo tenei, me hanga e koe he papaunga raraunga whakamatautau motuhake ka whakahouhia php artisan migrate:freshi nga wa katoa ka whakahaerehia nga whakamatautau.

E rua nga whiringa: te hanga-a-tinana i tetahi patengi raraunga motuhake, te whakamahi ranei i te putunga raraunga SQLite i roto i te mahara. Kua whirihorahia nga mea e rua i roto i te konae phpunit.xmlka whakaratohia ma te taunoadefinita me Laravel. Inaa, ka hiahia koe ki tenei waahanga:

<php>
    <env name="APP_ENV" value="testing"/>
    <env name="BCRYPT_ROUNDS" value="4"/>
    <env name="CACHE_DRIVER" value="array"/>
    <!-- <env name="DB_CONNECTION" value="sqlite"/> -->
    <!-- <env name="DB_DATABASE" value=":memory:"/> -->
    <env name="MAIL_MAILER" value="array"/>
    <env name="QUEUE_CONNECTION" value="sync"/>
    <env name="SESSION_DRIVER" value="array"/>
    <env name="TELESCOPE_ENABLED" value="false"/>
</php>

Tirohia te DB_CONNECTIONDB_DATABASEko ēhea e kōrerohia ana? Mena kei a koe te SQLite i runga i to tuumau, ko te mahi ngawari ko te whakakore noa i aua rarangi ka rere o whakamatautau ki taua putunga mahara-mahara.

I roto i tenei whakamatautau e kii ana matou kua pai te whakamotuhēhēnga o te kaiwhakamahi ka tukuna ki te wharangi kaainga tika, engari ka taea ano e matou te whakamatautau i nga raraunga tuuturu i roto i te paataka raraunga.

I tua atu i tenei waehere:

$this->assertAuthenticated();
$response->assertRedirect(RouteServiceProvider::HOME);

Ka taea hoki e tatou te whakamahi nga whakapae mo te whakamatautau i te papaunga raraunga ka mahi i tetahi mea penei:

$this->assertDatabaseCount('users', 1);
 
// Or...
$this->assertDatabaseHas('users', [
    'email' => 'test@example.com',
]);

Tauira o te wharangi Takiuru

Kia kite tatou i tetahi atu tauira o te whaarangi Takiuru me Laravel Breeze

tests/Feature/AuthenticationTest.php:

class AuthenticationTest extends TestCase
{
    use RefreshDatabase;
 
    public function test_login_screen_can_be_rendered()
    {
        $response = $this->get('/login');
 
        $response->assertStatus(200);
    }
 
    public function test_users_can_authenticate_using_the_login_screen()
    {
        $user = User::factory()->create();
 
        $response = $this->post('/login', [
            'email' => $user->email,
            'password' => 'password',
        ]);
 
        $this->assertAuthenticated();
        $response->assertRedirect(RouteServiceProvider::HOME);
    }
 
    public function test_users_can_not_authenticate_with_invalid_password()
    {
        $user = User::factory()->create();
 
        $this->post('/login', [
            'email' => $user->email,
            'password' => 'wrong-password',
        ]);
 
        $this->assertGuest();
    }
}

Mo te puka takiuru. He rite te arorau ki te rehitatanga, tika? Engari e toru nga tikanga hei utu mo te rua, no reira he tauira tenei mo te whakamatautau i nga ahuatanga pai me te kino. Na, ko te arorau noa me whakamatau koe i nga keehi e rua: ka pai te haere me te kore e taka.

Panui houtanga
Kaua e ngaro nga korero tino nui mo te mahi auaha. Waitohu ki te whiwhi i a raatau ma te imeera.

Ano, ko nga mea e kite ana koe i tenei whakamatautau ko te whakamahinga o Nga wheketere Raraunga Raraunga : Ka hangaia e Laravel he kaiwhakamahi rūpahu ( ano, i runga i to papaunga raraunga whakamatautau kua whakahoutia ) ka ngana ki te takiuru, me nga tohu tika, hē ranei.

Ano ano, ka hangaia e Laravel te wheketere o muadefinita me nga raraunga teka mo te Usertauira, i waho o te pouaka.

database/factories/UserFactory.php:

class UserFactory extends Factory
{
    public function definition()
    {
        return [
            'name' => $this->faker->name(),
            'email' => $this->faker->unique()->safeEmail(),
            'email_verified_at' => now(),
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
            'remember_token' => Str::random(10),
        ];
    }
}

Kei te kite koe, e hia nga mea kua whakaritea e Laravel ake, no reira he ngawari noa ma tatou ki te timata ki te whakamatautau?

Na ki te mahia e tatou php artisan testi muri i te whakauru i a Laravel Breeze, me kite tatou i tetahi mea penei:

 PASS  Tests\Unit\ExampleTest
✓ that true is true
 
 PASS  Tests\Feature\Auth\AuthenticationTest
✓ login screen can be rendered
✓ users can authenticate using the login screen
✓ users can not authenticate with invalid password
 
 PASS  Tests\Feature\Auth\EmailVerificationTest
✓ email verification screen can be rendered
✓ email can be verified
✓ email is not verified with invalid hash
 
 PASS  Tests\Feature\Auth\PasswordConfirmationTest
✓ confirm password screen can be rendered
✓ password can be confirmed
✓ password is not confirmed with invalid password
 
 PASS  Tests\Feature\Auth\PasswordResetTest
✓ reset password link screen can be rendered
✓ reset password link can be requested
✓ reset password screen can be rendered
✓ password can be reset with valid token
 
 PASS  Tests\Feature\Auth\RegistrationTest
✓ registration screen can be rendered
✓ new users can register
 
 PASS  Tests\Feature\ExampleTest
✓ the application returns a successful response
 
Tests:  17 passed
Time:   0.61s

Ko nga whakamatautau mahi ka whakaritea ki nga whakamatautau wae me etahi atu

Kua kite koe i nga kōpakiroto tests/Feature e tests/Unit ?. 

He aha te rereketanga i waenga i a raatau? 

I te ao, kei waho o te rauwiringa kaiao Laravel/PHP, he maha nga momo whakamatautau aunoa. Ka kitea e koe nga kupu penei:

  • Nga whakamatautau wae
  • Whakamātautau āhuatanga
  • Nga whakamatautau whakauru
  • Nga whakamatautau mahi
  • Whakamatau mutunga-ki-mutunga
  • Nga whakamatautau whakaaetanga
  • Nga whakamatautau auahi
  • etc.

He uaua te ahua, a ko nga rereketanga i waenga i enei momo whakamatautau ka pohehe i etahi wa. Koia te take i whakangawarihia e Laravel enei kupu rangirua katoa, ka whakarōpūtia kia rua: wae/ahuatanga.

Me korero noa, ka ngana nga whakamatautau ahua ki te mahi i nga mahi o o tono: tikina te URL, waea atu ki te API, peehia te ahua tika penei i te whakakii i te puka. He rite, he rite ranei nga mahi a nga whakamatautau ahua ki te mahi a tetahi kaiwhakamahi kaupapa, a-ringa, i roto i te ao.

E rua nga tikanga o nga whakamatautau wae. I te nuinga o te waa, ka kitea pea ka kiia tetahi whakamatautau aunoa ko te "whakamatautau wae" ka kiia te katoa ko te "whakamatautau wae". Engari i roto i te horopaki o te taumahinga me te waeine, ko tenei tukanga e pa ana ki te whakamatautau i tetahi waeine kore-iwi motuhake o te waehere, mo te wehe. Hei tauira, kei a koe he akomanga Laravel me tetahi tikanga e tatau ana i tetahi mea, penei i te utu ota katoa me nga tawhā. No reira, ma te whakamatautau wae e whakaatu mena ka whakahokia mai nga hua tika mai i tera tikanga (waewae waehere), he rereke nga tawhā.

Hei whakaputa i tetahi whakamatautau wae, me taapiri he haki:

php artisan make:test OrderPriceTest --unit

He rite te waehere i hangaia ki te whakamatautau waeine o muadefiPūnaha Laravel:

class OrderPriceTest extends TestCase
{
    public function test_example()
    {
        $this->assertTrue(true);
    }
}

Ka kite koe, karekau RefreshDatabase, a koinei tetahi o defite nuinga o nga whakamaramatanga whakamatautau waeine: kaore e pa ki te paataka, ka mahi hei "pouaka pango", ka wehea mai i te tono rere.

Ma te tamata i te pee i te hi‘oraa ta ’u i faahiti na mua ’tu, e mana‘o ana‘e e e piha taviniraa ta tatou OrderPrice.

app/Services/OrderPriceService.php:

class OrderPriceService
{
    public function calculatePrice($productId, $quantity, $tax = 0.0)
    {
        // Some kind of calculation logic
    }
}

Na, ka penei pea te ahua o te whakamatautau wae:

class OrderPriceTest extends TestCase
{
    public function test_single_product_no_taxes()
    {
        $product = Product::factory()->create(); // generate a fake product
        $price = (new OrderPriceService())->calculatePrice($product->id, 1);
        $this->assertEquals(1, $price);
    }
 
    public function test_single_product_with_taxes()
    {
        $price = (new OrderPriceService())->calculatePrice($product->id, 1, 20);
        $this->assertEquals(1.2, $price);
    }
 
    // More cases with more parameters
}

I roto i taku wheako whaiaro me nga kaupapa Laravel, ko te nuinga o nga whakamatautau he whakamatautau Whakaaturanga, ehara i nga whakamatautau Waehe. Tuatahi, me whakamatau koe mena ka mahi to tono, me pehea te whakamahi a te tangata pono.

I muri mai, mena kei a koe he tatauranga motuhake, arorau ranei ka taea e koe definire hei waeine, me nga tawhā, ka taea e koe te hanga whakamatautau wae mo tera.

I etahi wa, ko nga whakamatautau tuhi me whakarereke i te waehere ake me te whakahou ano kia pai ake ai te "whakamatautau": wehe i nga waahanga ki nga karaehe, tikanga motuhake ranei.

Ahea/me pehea te mahi whakamatautau?

He aha te tino whakamahinga o tenei php artisan test, ahea me whakahaere koe?

He rereke nga huarahi, i runga i to rerenga mahi pakihi, engari ko te tikanga me whakarite e koe he "matomato" nga whakamatautau katoa (arā, he hapa-kore) i mua i te pana i nga huringa waehere whakamutunga ki te putunga.

Na, ka mahi koe i to rohe mo to mahi, a ka whakaaro koe kua oti koe, whakahaere etahi whakamatautau kia mohio ai kaore koe i pakaru tetahi mea. Kia maumahara, ko to waehere ka puta he pepeke ehara i te mea i roto i to arorau anake engari ka pakaru pohehe ano etahi atu whanonga i roto i te waehere a tetahi atu i tuhia i mua.

Mena ka neke ake taatau, ka taea te mahi aunoa maha mea. Ma nga momo taputapu CI/CD, ka taea e koe te whakarite i nga whakamatautau kia whakahaere i nga wa ka panaia e te tangata nga huringa ki tetahi peka Git motuhake, i mua ranei i te hanumi waehere ki te peka whakaputa. Ko te rerengamahi ngawari ko te whakamahi i nga Mahi a Github, kei a au he ataata motuhake e whakaatu ana.

Me aha koe ki te whakamatau?

He rereke nga whakaaro mo te nui o te mea e kiia nei ko te "whakamatautau": whakamatauria nga mahi katoa me nga keehi kei runga i ia wharangi, whakawhāitihia ranei te mahi ki nga waahanga tino nui.

Inaa, koinei taku whakaae ki nga tangata e whakapae ana i nga whakamatautau aunoa mo te wa roa atu i te whai hua pono. Ka puta tenei ki te tuhi koe i nga whakamatautau mo ia taipitopito. E ai ki tera, ka hiahiatia pea e to kaupapa: ko te patai matua "he aha te utu mo te hapa pea".

I etahi atu kupu, me whakarite e koe nga mahi whakamatautau ma te patai i te patai "Ka aha mena ka rahua tenei waehere?" Mena he hapa to punaha utu, ka pa ki te pakihi. Na, ki te pakaru te mahi o o mahi/whakaaetanga, he take haumarutanga nui tenei.

He pai ki ahau te korero a Matt Stauffer i tetahi huihuinga: "Me whakamatau tuatahi koe i nga mea, mena ka taka, ka peia koe i to mahi." Ko te tikanga he whakanuia tera, engari ka whiwhi koe i te whakaaro: whakamatau i nga mea nui i te tuatahi. Na etahi atu waahanga, mena he wa koe.

PEST: he rereke hou ki te PHPUnit

Ko nga tauira katoa i runga ake nei ka ahu mai i te taputapu whakamatautau o mua o Laraveldefiahiahi: PHPUnit . Engari i roto i nga tau kua puta etahi atu taputapu i roto i te rauwiringa kaiao me tetahi o nga mea rongonui hou ko PĀTAI . I hangaia e te kaimahi mana o Laravel Nuno Maduro , e whai ana ki te whakangawari i te wetereo, kia tere ake te tuhi tohu mo nga whakamatautau.

I raro i te kaapu, ka rere su PHPUnit, hei paparanga taapiri, e ngana ana ki te whakaiti i etahi waahanga i mua i te tukuruadefite mutunga o te waehere PHPUnit.

Ka titiro tatou ki tetahi tauira. Kia mahara ki te karaehe whakamatautau o muadefii roto i Laravel? Ka whakamahara ahau ki a koe:

namespace Tests\Feature;
 
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
 
class ExampleTest extends TestCase
{
    public function test_the_application_returns_a_successful_response()
    {
        $response = $this->get('/');
 
        $response->assertStatus(200);
    }
}

Kei te mohio koe he aha te ahua o te whakamatautau mo PEST?

test('the application returns a successful response')->get('/')->assertStatus(200);

Ae, KOTAHI rarangi waehere katahi ano. Na, ko te whainga o PEST ko te tango i te utu o:

  • Te hanga karaehe me nga tikanga mo nga mea katoa;
  • toronga take whakamatautau;
  • Ma te whakauru i nga mahi ki runga i nga raina motuhake: i roto i te PEST ka taea e koe te here tahi.

Hei whakaputa i tetahi whakamatautau PEST ki Laravel, me tohu he haki taapiri:

php artisan make:test HomepageTest --pest

I tenei wa e tuhi ana, he tino rongonui a PEST i waenga i nga kaiwhakawhanake Laravel, engari nau ake te hiahia ki te whakamahi i tenei taputapu taapiri me te ako i tana wetereo, me te tuhipoka PHPUnit.

BlogInnovazione.it

Panui houtanga
Kaua e ngaro nga korero tino nui mo te mahi auaha. Waitohu ki te whiwhi i a raatau ma te imeera.

Nga tuhinga o mua

Nga Hua o nga Wharangi Tae mo nga Tamariki - he ao makutu mo nga reanga katoa

Ko te whakawhanake i nga pukenga motuka pai na roto i te tae ka whakarite i nga tamariki mo nga pukenga uaua ake penei i te tuhi. Ki te tae…

2 May 2024

Kei konei te heke mai: Me pehea te Ahumahi kaipuke e huri ana i te ohanga o te ao

Ko te waahanga moana he mana ohaoha pono o te ao, kua whakatere ki te maakete 150 piriona ...

1 May 2024

Ka haina nga Kaiwhakaputa me te OpenAI i nga whakaaetanga hei whakahaere i te rere o nga korero i tukatukahia e Artificial Intelligence

I te Mane kua hipa, i panuitia e te Financial Times tetahi mahi me OpenAI. Ka raihana a FT i tana kairipoata o te ao…

30 Paenga-whāwhā 2024

Utu Ipurangi: Anei te pehea o nga Ratonga Rere e Utu ana koe mo ake tonu atu

E hia miriona nga taangata e utu ana mo nga ratonga rerema, e utu ana i nga utu ohaurunga ia marama. Ko te whakaaro noa ko koe…

29 Paenga-whāwhā 2024