1
0
Fork 0
mirror of https://gitlab.com/bramw/baserow.git synced 2025-03-17 05:52:42 +00:00

fix boolean filter with null filter value

This commit is contained in:
Cezary Statkiewicz 2024-12-16 10:44:30 +00:00
parent f9da1fbe97
commit 2d5c85b601
4 changed files with 59 additions and 1 deletions
changelog/entries/unreleased/bug
web-frontend
modules/database
test/unit/database

View file

@ -0,0 +1,7 @@
{
"type": "bug",
"message": "Fixed boolean filter with null filter value",
"issue_number": null,
"bullet_points": [],
"created_at": "2024-12-13"
}

View file

@ -13,7 +13,7 @@ export default {
mixins: [viewFilter],
computed: {
copy() {
const value = this.filter.value.toString().toLowerCase().trim()
const value = (this.filter.value || '').toString().toLowerCase().trim()
return trueValues.includes(value)
},
},

View file

@ -2750,6 +2750,9 @@ export class BooleanViewFilterType extends ViewFilterType {
}
matches(rowValue, filterValue, field, fieldType) {
if (filterValue === null) {
filterValue = false
}
filterValue = trueValues.includes(
filterValue.toString().toLowerCase().trim()
)

View file

@ -1,6 +1,7 @@
import { TestApp } from '@baserow/test/helpers/testApp'
import moment from '@baserow/modules/core/moment'
import {
BooleanViewFilterType,
DateAfterDaysAgoViewFilterType,
DateAfterOrEqualViewFilterType,
DateAfterTodayViewFilterType,
@ -1873,6 +1874,44 @@ const formulaUrlFieldFilterNotEqualCases = [
},
]
const booleanFieldTests = [
{
filterValue: null,
rowValue: null,
expectedResult: true, // both will evaluate to false
},
{
filterValue: null,
rowValue: '',
expectedResult: true, // both will evaluate to false
},
{
filterValue: '',
rowValue: '',
expectedResult: true, // both will evaluate to false
},
{
filterValue: false,
rowValue: true,
expectedResult: false,
},
{
filterValue: '0',
rowValue: '0',
expectedResult: true,
},
{
filterValue: '1',
rowValue: '0',
expectedResult: false,
},
{
filterValue: '1',
rowValue: '1',
expectedResult: true,
},
]
describe('All Tests', () => {
let testApp = null
@ -2671,4 +2710,13 @@ describe('All Tests', () => {
'formulaUrlFieldFilters lenght is lower than test case %j',
runUrlFormulafieldTest
)
test.each(booleanFieldTests)('Boolean filter type tests %j', (values) => {
const result = new BooleanViewFilterType().matches(
values.rowValue,
values.filterValue,
{}
)
expect(result).toBe(values.expectedResult)
})
})