<?php

namespace SilverStripe\Comments\Tests;

use SilverStripe\Comments\Admin\CommentAdmin;
use SilverStripe\Dev\SapphireTest;
use SilverStripe\i18n\i18n;
use SilverStripe\Security\Member;

class CommentAdminTest extends SapphireTest
{
    /**
     * {@inheritDoc}
     */
    protected $usesDatabase = true;

    public function testProvidePermissions()
    {
        $commentAdmin = new CommentAdmin();
        $locale = i18n::get_locale();

        i18n::set_locale('fr');
        $expected = array(
            'CMS_ACCESS_CommentAdmin' => array(
                # FIXME - this is a bug, missing from lang.yml files
                'name' => 'Access to \'Comments\' section',
                'category' => 'Accès au CMS'
            )
        );
        $this->assertEquals($expected, $commentAdmin->providePermissions());

        i18n::set_locale($locale);
        $expected = array(
            'CMS_ACCESS_CommentAdmin' => array(
                # FIXME - this is a bug, missing from lang.yml files
                'name' => 'Access to \'Comments\' section',
                'category' => 'CMS Access'
            )
        );
        $this->assertEquals($expected, $commentAdmin->providePermissions());
    }

    public function testGetEditForm()
    {
        $commentAdmin = new CommentAdmin();
        $this->logInWithPermission('CMS_ACCESS_CommentAdmin');
        $form = $commentAdmin->getEditForm();
        $names = $this->getFormFieldNames($form);
        $expected = array(
            'NewComments',
            'ApprovedComments',
            'SpamComments'
        );
        $this->assertEquals($expected, $names);

        if ($member = Member::currentUser()) {
            $member->logOut();
        }

        $form = $commentAdmin->getEditForm();
    }

    private function getFormFieldNames($form)
    {
        $result = array();
        $fields = $form->Fields();
        $tab = $fields->findOrMakeTab('Root');
        $fields = $tab->FieldList();
        foreach ($fields as $field) {
            array_push($result, $field->getName());
        }
        return $result;
    }
}