Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,15 @@ updates:
directory: "/"
schedule:
interval: "daily"
commit-message:
prefix: Bump
assignees:
- 'mleutenegger'
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: "daily"
commit-message:
prefix: Bump
assignees:
- 'mleutenegger'
88 changes: 7 additions & 81 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,84 +7,10 @@ env:
SS_ENVIRONMENT_TYPE: "dev"
RECIPE_CMS_VERSION: 4.x-dev
jobs:
phpunit:
name: 🧩 PHPUnit
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
php:
- 7.4
container: brettt89/silverstripe-web:${{ matrix.php }}-apache
services:
database:
image: mysql:5.7
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
env:
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
env:
SS_DEFAULT_ADMIN_USERNAME: admin
SS_DEFAULT_ADMIN_PASSWORD: admin
SS_DATABASE_SERVER: database
SS_DATABASE_NAME: ss_default_${{ matrix.php }}
SS_DATABASE_USERNAME: root
SS_DATABASE_PASSWORD: ''
SS_ENVIRONMENT_TYPE: dev
steps:
- name: Install Composer
run: |
curl \
-sS https://getcomposer.org/installer \
| php && \
mv -f composer.phar /usr/local/bin/composer
- name: Checkout code
uses: actions/checkout@v3.0.2
- name: install dependencies
run: |
composer require --no-update silverstripe/recipe-cms:$RECIPE_CMS_VERSION &&\
composer install --prefer-dist --no-interaction --no-progress --no-suggest --optimize-autoloader --verbose --profile
- name: run phpunit
run: vendor/bin/phpunit -c "phpunit.xml" tests/
- name: generate coverage
run: phpdbg -qrr vendor/bin/phpunit -dmemory_limit=512M --coverage-clover=coverage.xml tests/
if: ${{ matrix.php == '7.4' }}
- name: submit coverage
uses: codecov/codecov-action@v3.1.0
with:
file: ./coverage.xml
if: ${{ matrix.php == '7.4' }}
phpstan:
name: 🔺 PHPStan
runs-on: ubuntu-latest
container: brettt89/silverstripe-web:7.4-apache
steps:
- name: Install Composer
run: |
curl \
-sS https://getcomposer.org/installer \
| php && \
mv -f composer.phar /usr/local/bin/composer
- name: Checkout code
uses: actions/checkout@v3.0.2
- name: install dependencies
run: |
composer require --no-update silverstripe/recipe-cms:$RECIPE_CMS_VERSION &&\
composer install --prefer-dist --no-interaction --no-progress --no-suggest --optimize-autoloader --verbose --profile
- name: run phpstan
run: vendor/bin/phpstan analyse src/ -c "phpstan.neon" -a vendor/syntro/silverstripe-phpstan/bootstrap.php --level 4
phpcs:
name: 🔮 PHPcs
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3.0.2
- name: lint source
uses: chindit/actions-phpcs@master
with:
dir: src/
- name: lint tests
uses: chindit/actions-phpcs@master
with:
dir: tests/
silverstripe-module:
name: 🧰 Silverstripe Module Testsuite
uses: syntro-opensource/workflows/.github/workflows/silverstripe-module.yml@master
with:
phpunit: true
phpstan: true
phpcs: true
15 changes: 15 additions & 0 deletions src/Dev/FormPage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

namespace Syntro\SilverstripeBootstrapForms\Dev;

use SilverStripe\Dev\TestOnly;
use SilverStripe\CMS\Model\SiteTree;

/**
* demo page
* @author Matthias Leutenegger
*/
class FormPage extends SiteTree implements TestOnly
{

}
83 changes: 83 additions & 0 deletions src/Dev/FormPageController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
<?php

namespace Syntro\SilverstripeBootstrapForms\Dev;

use SilverStripe\Dev\TestOnly;
use SilverStripe\CMS\Controllers\ContentController;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\Form;
use SilverStripe\Forms\FormAction;
use SilverStripe\Forms\RequiredFields;
use Syntro\SilverstripeBootstrapForms\Forms\CheckboxField;
use Syntro\SilverstripeBootstrapForms\Forms\CheckboxSetField;
use Syntro\SilverstripeBootstrapForms\Forms\DropdownField;
use Syntro\SilverstripeBootstrapForms\Forms\EmailField;
use Syntro\SilverstripeBootstrapForms\Forms\OptionsetField;
use Syntro\SilverstripeBootstrapForms\Forms\PhoneField;
use Syntro\SilverstripeBootstrapForms\Forms\TextareaField;
use Syntro\SilverstripeBootstrapForms\Forms\TextField;
use Syntro\SilverstripeBootstrapForms\Forms\FieldGroup;

/**
* demo controller
* @author Matthias Leutenegger
*/
class FormPageController extends ContentController implements TestOnly
{
/**
* Defines methods that can be called directly
* @config
* @var array
*/
private static $allowed_actions = [
'Form' => true
];

/**
* Form
*
* @return Form
*/
public function Form()
{
$fields = new FieldList(
$checkboxfield = CheckboxField::create('checkboxfield', 'checkboxfield'),
$checkboxsetfield = CheckboxSetField::create('checkboxsetfield', 'checkboxsetfield', ['a' => 'value a', 'b' => 'value b']),
$dropdownfield = DropdownField::create('dropdownfield', 'dropdownfield', ['a' => 'value a', 'b' => 'value b']),
$emailfield = EmailField::create('emailfield', 'emailfield'),
$optionsetfield = OptionsetField::create('optionsetfield', 'optionsetfield', ['a' => 'value a', 'b' => 'value b']),
$phonefield = PhoneField::create('phonefield', 'phonefield'),
$textareafield = TextareaField::create('textareafield', 'textareafield'),
$textfield = TextField::create('textfield', 'textfield'),
);

$checkboxfield->addHolderClass('checkboxfieldholderclass')->addExtraClass('checkboxfieldextraclass');
$checkboxsetfield->addHolderClass('checkboxsetfieldholderclass')->addExtraClass('checkboxsetfieldextraclass');
$dropdownfield->addHolderClass('dropdownfieldholderclass')->addExtraClass('dropdownfieldextraclass');
$emailfield->addHolderClass('emailfieldholderclass')->addExtraClass('emailfieldextraclass');
$optionsetfield->addHolderClass('optionsetfieldholderclass')->addExtraClass('optionsetfieldextraclass');
$phonefield->addHolderClass('phonefieldholderclass')->addExtraClass('phonefieldextraclass');
$textareafield->addHolderClass('textareafieldholderclass')->addExtraClass('textareafieldextraclass');
$textfield->addHolderClass('textfieldholderclass')->addExtraClass('textfieldextraclass');

$actions = new FieldList(FormAction::create('submit', 'Submit'));
$required = new RequiredFields('required');
$form = new Form($this, 'Form', $fields, $actions, $required);

return $form;
}

/**
* submit - submitted form
*
* @param array $data submitted Data
* @param Form $form original form
* @return mixed
*/
public function submit($data, Form $form)
{
$form->sessionMessage('Hello.', 'success');

return $this->redirectBack();
}
}
24 changes: 0 additions & 24 deletions tests/DemoTest.php

This file was deleted.

81 changes: 81 additions & 0 deletions tests/HolderClassTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
<?php

namespace Syntro\SilverstripeBootstrapForms\Tests;

use SilverStripe\Dev\SapphireTest;
use Syntro\SilverstripeBootstrapForms\Forms\TextField;

/**
* Test the correct handling of the
* @author Matthias Leutenegger <hello@syntro.ch>
*/
class HolderClassTest extends SapphireTest
{
protected static $fixture_file = './fixture.yml';

/**
* test no title
*
* @return void
*/
public function testNoTitleNoLabel()
{
$field = TextField::create('Field', 'Field');
$field->setTitle(null);
$this->assertEquals('form-holder--no-label', $field->holderClass());
}

/**
* testCheckHolderClass
*
* @return void
*/
public function testCheckHolderClass()
{
$field = TextField::create('Field', 'Field');

$field->addHolderClass('holderclass');

$this->assertFalse($field->hasHolderClass('test'));

$this->assertTrue($field->hasHolderClass('holderclass'));
}


/**
* testHolderClassManipulation
*
* @return void
*/
public function testHolderClassManipulation()
{
$field = TextField::create('Field', 'Field');

$field->addHolderClass('testholderclass');
$this->assertEquals('testholderclass', $field->holderClass());

$field->addHolderClass('secondclass');
$this->assertEquals('testholderclass secondclass', $field->holderClass());

$field->removeHolderClass('testholderclass');
$this->assertEquals('secondclass', $field->holderClass());

$field->removeHolderClass('secondclass');
$this->assertEquals('', $field->holderClass());

}

/**
* testValidationClass
*
* @return void
*/
public function testValidationClass()
{
$field = TextField::create('Field', 'Field');

$field->setMessage('validationError', 'validation');

$this->assertStringContainsString('is-invalid', $field->extraClass());
}
}
34 changes: 34 additions & 0 deletions tests/PhoneFieldTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

namespace Syntro\SilverstripeBootstrapForms\Tests;

use SilverStripe\Dev\FunctionalTest;
use Syntro\SilverstripeBootstrapForms\Dev\FormPage;
use Syntro\SilverstripeBootstrapForms\Forms\PhoneField;

/**
* Test the PhoneFieldClass
* @author Matthias Leutenegger <hello@syntro.ch>
*/
class PhoneFieldTest extends FunctionalTest
{
protected static $fixture_file = './fixture.yml';

/**
* testValidation
*
* @return void
*/
public function testValidation()
{
$formPage = $this->objFromFixture(FormPage::class, 'page');
$formPage->copyVersionToStage('Stage', 'Live');

$page = $this->get('/form');
$submit = $this->submitForm('Form_Form', null, $data = [
'phonefield' => '-+asb'
]);

$this->assertStringContainsString('Please enter a valid phone number', $submit->getBody());
}
}
Loading