[
https://issues.jboss.org/browse/ARQ-1809?page=com.atlassian.jira.plugin.s...
]
Steven Dodd updated ARQ-1809:
-----------------------------
Description:
Steps to reproduce:
1. Create a table, "test", with a single column, an integer primary key,
"id".
2. Try the following test case under the persistence extension:
{code}
@UsingDataSet({test.yml})
@ShouldMatchDataSet(value={test.yml})
@Test
public void test() {
// do nothing
}
{code}
{code:title=test.yml}
test:
- id: -1
- id: -2
{code}
Result: test fails like so:
{code}
java.lang.AssertionError: Test failed in 4 cases.
test | In row 0: expected value of id "-1" but was "-2".
test | In row 0: expected value of owner_id "-1" but was "-2".
test | In row 1: expected value of id "-2" but was "-1".
test | In row 1: expected value of owner_id "-2" but was "-1".
{code}
Reason:
The expected dataset is loaded by the YamlDataSetProducer, and has all of its column types
set to UNKNOWN.
The actual dataset is loaded by <whatever>, and has all of its column types set to
their actual types in the database.
DataSetComparator wraps each dataset in a SortedTable, to provide a consistent row
ordering for comparison.
SortedTable ends up sorting every column of the expected dataset as strings, because the
column types are UNKNOWN, but it sorts the actual dataset columns using their actual
column types, e.g. numeric sort in the test case above.
As a result, the rows of the expected and actual datasets are not consistently sorted for
comparison, which results in totally inaccurate comparison results.
Suggested Fix:
The expected dataset needs to have accurate column types assigned, not UNKNOWN.
was:
Steps to reproduce:
1. Create a table, "test", with a single column, an integer primary key,
"id".
2. Try the following test case under the persistence extension:
{code}
@UsingDataSet({test.yml})
@ShouldMatchDataSet(value={test.yml})
@Test
public void test() {
// do nothing
}
{code}
{code:title=test.yml}
test:
- id: -1
- id: -2
{code}
Result: test fails like so:
{code}
java.lang.AssertionError: Test failed in 4 cases.
test | In row 0: expected value of id "-1" but was "-2".
test | In row 0: expected value of owner_id "-1" but was "-2".
test | In row 1: expected value of id "-2" but was "-1".
test | In row 1: expected value of owner_id "-2" but was "-1".
{code}
Reason:
The expected dataset is loaded by the YamlDataSetProducer, and has all of its column types
set to UNKNOWN.
The actual dataset is loaded by <whatever>, and has all of its column types set to
their actual types in the database.
DataSetComparator wraps each dataset in a SortedTable, to provide a consistent ordering
for comparison.
SortedTable ends up sorting every column of the expected dataset as strings, because the
column types are UNKNOWN, but it sorts the actual dataset columns using their actual
column types, e.g. numeric sort in the test case above.
As a result, the expected and actual datasets are not consistently sorted for comparison,
which results in totally inaccurate comparison results.
Suggested Fix:
The expected dataset needs to have accurate column types assigned, not UNKNOWN.
@ShouldMatchDataSet is broken when ordering by non-string columns
-----------------------------------------------------------------
Key: ARQ-1809
URL:
https://issues.jboss.org/browse/ARQ-1809
Project: Arquillian
Issue Type: Feature Request
Security Level: Public(Everyone can see)
Components: Extension - Persistence
Affects Versions: persistence_1.0.0.Alpha7
Reporter: Steven Dodd
Assignee: Bartosz Majsak
Steps to reproduce:
1. Create a table, "test", with a single column, an integer primary key,
"id".
2. Try the following test case under the persistence extension:
{code}
@UsingDataSet({test.yml})
@ShouldMatchDataSet(value={test.yml})
@Test
public void test() {
// do nothing
}
{code}
{code:title=test.yml}
test:
- id: -1
- id: -2
{code}
Result: test fails like so:
{code}
java.lang.AssertionError: Test failed in 4 cases.
test | In row 0: expected value of id "-1" but was "-2".
test | In row 0: expected value of owner_id "-1" but was "-2".
test | In row 1: expected value of id "-2" but was "-1".
test | In row 1: expected value of owner_id "-2" but was "-1".
{code}
Reason:
The expected dataset is loaded by the YamlDataSetProducer, and has all of its column
types set to UNKNOWN.
The actual dataset is loaded by <whatever>, and has all of its column types set to
their actual types in the database.
DataSetComparator wraps each dataset in a SortedTable, to provide a consistent row
ordering for comparison.
SortedTable ends up sorting every column of the expected dataset as strings, because the
column types are UNKNOWN, but it sorts the actual dataset columns using their actual
column types, e.g. numeric sort in the test case above.
As a result, the rows of the expected and actual datasets are not consistently sorted for
comparison, which results in totally inaccurate comparison results.
Suggested Fix:
The expected dataset needs to have accurate column types assigned, not UNKNOWN.
--
This message was sent by Atlassian JIRA
(v6.2.6#6264)