<?php

namespace SilverStripe\ContentReview\Tests;

use SilverStripe\Dev\FunctionalTest;
use SilverStripe\CMS\Model\SiteTree;
// @todo add translatable namespace
use Translatable;

/**
 * Extend this class when writing unit tests which are compatible with other modules.
 * All compatibility code goes here.
 */
abstract class ContentReviewBaseTest extends FunctionalTest
{
    /**
     * @var bool
     */
    protected $translatableEnabledBefore;

    protected function setUp(): void
    {
        parent::setUp();

        /*
         *  We set the locale for pages explicitly, because if we don't, then we get into a situation
         *  where the page takes on the tester's (your) locale, and any calls to simulate subsequent requests
         *  (e.g. $this->post()) do not seem to get passed the tester's locale,
         *  but instead fallback to the default locale.
         *
         *  So we set the pages locale to be the default locale, which will then match any subsequent requests.
         *
         *  If creating pages in your unit tests (rather than reading from the fixtures file), you must explicitly call
         *  self::compat() on the page, for the same reasons as above.
         */
        if (class_exists(Translatable::class)) {
            $this->translatableEnabledBefore = SiteTree::has_extension(Translatable::class);
            SiteTree::remove_extension(Translatable::class);
        }
    }

    protected function tearDown(): void
    {
        if (class_exists(Translatable::class)) {
            if ($this->translatableEnabledBefore) {
                SiteTree::add_extension(Translatable::class);
            }
        }

        parent::tearDown();
    }
}