File: /home/xedaptot/ai.naniguide.com/tests/Unit/MailListFieldMappingTest.php
<?php
/**
* MailListFieldMappingTest — unit tests for preserved-field detection and
* case-insensitive header normalization. No DB needed.
*
* Background: previously the import flow used `array_only($r, ['tags', 'status'])`,
* a case-sensitive key match. CSVs with header `Status` (capitalized) were
* silently ignored; the import branch fell through to the hard-coded
* `STATUS_SUBSCRIBED` default. This file pins the new behavior: detection +
* normalization treat the two preserved field headers case-insensitively.
*/
use App\Library\MailListFieldMapping;
test('hasPreservedFieldColumn — lowercase status matches', function () {
expect(MailListFieldMapping::hasPreservedFieldColumn(['email', 'status'], 'status'))->toBeTrue();
});
test('hasPreservedFieldColumn — capitalized Status matches (case-insensitive)', function () {
expect(MailListFieldMapping::hasPreservedFieldColumn(['Email', 'Status'], 'status'))->toBeTrue();
});
test('hasPreservedFieldColumn — uppercase STATUS matches (case-insensitive)', function () {
expect(MailListFieldMapping::hasPreservedFieldColumn(['EMAIL', 'STATUS'], 'status'))->toBeTrue();
});
test('hasPreservedFieldColumn — header absent returns false', function () {
expect(MailListFieldMapping::hasPreservedFieldColumn(['email', 'first_name'], 'status'))->toBeFalse();
});
test('hasPreservedFieldColumn — surrounding whitespace tolerated', function () {
expect(MailListFieldMapping::hasPreservedFieldColumn(['email', ' Status '], 'status'))->toBeTrue();
});
test('hasPreservedFieldColumn — lowercase tags matches', function () {
expect(MailListFieldMapping::hasPreservedFieldColumn(['email', 'tags'], 'tags'))->toBeTrue();
});
test('hasPreservedFieldColumn — capitalized Tags matches', function () {
expect(MailListFieldMapping::hasPreservedFieldColumn(['Email', 'Tags'], 'tags'))->toBeTrue();
});
test('hasPreservedFieldColumn — uppercase TAGS matches', function () {
expect(MailListFieldMapping::hasPreservedFieldColumn(['EMAIL', 'TAGS'], 'tags'))->toBeTrue();
});
test('hasPreservedFieldColumn — tags header absent returns false', function () {
expect(MailListFieldMapping::hasPreservedFieldColumn(['email', 'first_name'], 'tags'))->toBeFalse();
});
test('hasPreservedFieldColumn — empty header list returns false', function () {
expect(MailListFieldMapping::hasPreservedFieldColumn([], 'status'))->toBeFalse();
});