Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
C
caosdb-cppinttest
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
caosdb
Software
caosdb-cppinttest
Commits
7c3ed020
Verified
Commit
7c3ed020
authored
2 years ago
by
Timm Fitschen
Browse files
Options
Downloads
Patches
Plain Diff
WIP: tests for select queries
parent
27fc8af1
No related branches found
No related tags found
2 merge requests
!28
Release 0.2.2
,
!27
F grpc select
Pipeline
#30332
failed
2 years ago
Stage: info
Stage: setup
Stage: build
Stage: test
Changes
1
Pipelines
3
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
test/test_select.cpp
+214
-25
214 additions, 25 deletions
test/test_select.cpp
with
214 additions
and
25 deletions
test/test_select.cpp
+
214
−
25
View file @
7c3ed020
...
...
@@ -19,31 +19,43 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include
"caosdb/connection.h"
// for Connection, ConnectionManager
#include
"caosdb/data_type.h"
// for AtomicDataType
#include
"caosdb/transaction.h"
// for Transaction, ResultTable
#include
"caosdb/value.h"
// for Value
#include
<gtest/gtest-message.h>
// for Message
#include
<gtest/gtest-test-part.h>
// for SuiteApiResolver, TestFactoryImpl
#include
<gtest/gtest_pred_impl.h>
// for Test, TestInfo, EXPECT_EQ, TEST
#include
<memory>
// for allocator, unique_ptr, __shared_p...
//
#include
"caosdb/connection.h"
// for Connection, ConnectionManager
#include
"caosdb/data_type.h"
// for AtomicDataType
#include
"caosdb/entity.h"
// for Entity, Property, Role, Parent
#include
"caosdb/result_set.h"
// for Entity, ResultSet, ResultSet::ite...
#include
"caosdb/result_table.h"
// for ResultTable::HeaderIterator, Resu...
#include
"caosdb/transaction.h"
// for Transaction, ResultTable
#include
"caosdb/value.h"
// for Value
#include
<gtest/gtest-message.h>
// for Message
#include
<gtest/gtest-test-part.h>
// for SuiteApiResolver, TestFactoryImpl
#include
<gtest/gtest_pred_impl.h>
// for Test, TestInfo, EXPECT_EQ, TEST
#include
<iostream>
// for operator<<, basic_ostream::operat...
#include
<memory>
// for allocator, unique_ptr, __shared_p...
#include
<string>
// for string
namespace
caosdb
::
transaction
{
using
caosdb
::
entity
::
AtomicDataType
;
using
caosdb
::
entity
::
Role
;
using
caosdb
::
entity
::
Property
;
using
caosdb
::
entity
::
Parent
;
using
caosdb
::
entity
::
Entity
;
using
caosdb
::
entity
::
Parent
;
using
caosdb
::
entity
::
Property
;
using
caosdb
::
entity
::
Role
;
using
caosdb
::
entity
::
Value
;
class
test_select
:
public
::
testing
::
Test
{
public:
static
void
InsertEntity
(
Entity
*
entity
)
{
const
auto
&
connection
=
caosdb
::
connection
::
ConnectionManager
::
GetDefaultConnection
();
auto
insert_transaction
(
connection
->
CreateTransaction
());
insert_transaction
->
InsertEntity
(
entity
);
insert_transaction
->
Execute
();
}
static
void
DeleteEntities
()
{
// delete all entities
const
auto
&
connection
=
caosdb
::
connection
::
ConnectionManager
::
GetDefaultConnection
();
auto
query_transaction
(
connection
->
CreateTransaction
());
query_transaction
->
Query
(
"FIND Test*"
);
query_transaction
->
Query
(
"FIND Entity"
);
// query_transaction->Query("FIND Test*");
query_transaction
->
Execute
();
if
(
query_transaction
->
GetResultSet
().
size
()
>
0
)
{
std
::
cout
<<
"Cleanup: Deleting "
<<
query_transaction
->
GetResultSet
().
size
()
<<
" entities."
...
...
@@ -56,22 +68,24 @@ public:
}
}
static
auto
CreateTestProp
()
->
Entity
{
static
auto
CreateTestProp
(
const
std
::
string
&
name
,
AtomicDataType
data_type
)
->
Entity
{
Entity
entity
;
entity
.
SetRole
(
Role
::
PROPERTY
);
entity
.
SetName
(
"TestProp"
);
entity
.
SetDataType
(
AtomicDataType
::
TEXT
);
entity
.
SetName
(
name
);
entity
.
SetDescription
(
"Prop Description "
+
name
);
entity
.
SetDataType
(
data_type
);
return
entity
;
}
static
auto
CreateTestRT
()
->
Entity
{
Entity
entity
;
entity
.
SetRole
(
Role
::
RECORD_TYPE
);
entity
.
SetDescription
(
"RT Description"
);
entity
.
SetName
(
"TestRT"
);
return
entity
;
}
static
auto
CreateRecord
(
const
std
::
string
&
property_name
,
Value
value
)
->
Entity
{
static
auto
CreateRecord
(
const
std
::
string
&
property_name
,
const
Value
&
value
)
->
Entity
{
Entity
entity
;
entity
.
SetRole
(
Role
::
RECORD
);
Parent
parent
;
...
...
@@ -82,6 +96,11 @@ public:
property
.
SetValue
(
value
);
entity
.
AppendProperty
(
property
);
Property
dummyProperty
;
dummyProperty
.
SetName
(
"TestProp2"
);
dummyProperty
.
SetValue
(
"dummy value"
);
entity
.
AppendProperty
(
dummyProperty
);
return
entity
;
}
...
...
@@ -93,19 +112,50 @@ protected:
const
auto
&
connection
=
caosdb
::
connection
::
ConnectionManager
::
GetDefaultConnection
();
auto
insert_transaction
(
connection
->
CreateTransaction
());
insert_transaction
->
InsertEntity
(
CreateTestRT
());
insert_transaction
->
InsertEntity
(
CreateTestProp
());
auto
rt
=
CreateTestRT
();
insert_transaction
->
InsertEntity
(
&
rt
);
auto
p
=
CreateTestProp
(
"TestProp"
,
AtomicDataType
::
TEXT
);
insert_transaction
->
InsertEntity
(
&
p
);
p
=
CreateTestProp
(
"TestProp2"
,
AtomicDataType
::
TEXT
);
insert_transaction
->
InsertEntity
(
&
p
);
p
=
CreateTestProp
(
"TestPropDouble"
,
AtomicDataType
::
DOUBLE
);
p
.
SetUnit
(
"m"
);
insert_transaction
->
InsertEntity
(
&
p
);
p
=
CreateTestProp
(
"TestPropInt"
,
AtomicDataType
::
INTEGER
);
p
.
SetUnit
(
"m"
);
insert_transaction
->
InsertEntity
(
&
p
);
p
=
CreateTestProp
(
"TestPropBool"
,
AtomicDataType
::
BOOLEAN
);
insert_transaction
->
InsertEntity
(
&
p
);
insert_transaction
->
Execute
();
}
void
TearDown
()
override
{
DeleteEntities
();
}
void
TearDown
()
override
{
DeleteEntities
();
}
};
/*
* Test select query on empty database.
*/
TEST_F
(
test_select
,
test_select_empy
)
{
test_select
::
DeleteEntities
();
const
auto
&
connection
=
caosdb
::
connection
::
ConnectionManager
::
GetDefaultConnection
();
auto
query_transaction
(
connection
->
CreateTransaction
());
query_transaction
->
Query
(
"SELECT name FROM RecordType TestRT"
);
query_transaction
->
Execute
();
EXPECT_EQ
(
query_transaction
->
GetResultTable
().
GetHeader
().
size
(),
1
);
for
(
const
auto
&
column
:
query_transaction
->
GetResultTable
().
GetHeader
())
{
EXPECT_EQ
(
column
.
GetName
(),
"name"
);
}
EXPECT_EQ
(
query_transaction
->
GetResultTable
().
size
(),
0
);
for
(
const
auto
&
row
:
query_transaction
->
GetResultTable
().
GetRows
())
{
EXPECT_EQ
(
row
.
GetValue
(
"name"
).
GetAsString
(),
"bla"
);
// should never be executed
}
}
/*
* Test select name query on record type.
*/
TEST_F
(
test_select
,
test_select_name
)
{
const
auto
&
connection
=
caosdb
::
connection
::
ConnectionManager
::
GetDefaultConnection
();
...
...
@@ -113,13 +163,152 @@ TEST_F(test_select, test_select_name) {
query_transaction
->
Query
(
"SELECT name FROM RecordType TestRT"
);
query_transaction
->
Execute
();
EXPECT_EQ
(
query_transaction
->
GetResultTable
().
GetHeader
().
size
(),
1
);
for
(
const
auto
&
column
:
query_transaction
->
GetResultTable
().
GetHeader
())
{
for
(
const
auto
&
column
:
query_transaction
->
GetResultTable
().
GetHeader
())
{
EXPECT_EQ
(
column
.
GetName
(),
"name"
);
}
EXPECT_EQ
(
query_transaction
->
GetResultTable
().
size
(),
1
);
for
(
const
auto
&
row
:
query_transaction
->
GetResultTable
().
GetRows
())
{
EXPECT_EQ
(
row
.
GetValue
(
"name"
).
GetAsString
(),
"bla"
);
for
(
const
auto
&
row
:
query_transaction
->
GetResultTable
().
GetRows
())
{
EXPECT_EQ
(
row
.
GetValue
(
"name"
).
GetAsString
(),
"TestRT"
);
}
}
/*
* Test select description query on record type.
*/
TEST_F
(
test_select
,
test_select_description
)
{
const
auto
&
connection
=
caosdb
::
connection
::
ConnectionManager
::
GetDefaultConnection
();
auto
query_transaction
(
connection
->
CreateTransaction
());
query_transaction
->
Query
(
"SELECT description FROM RecordType TestRT"
);
query_transaction
->
Execute
();
EXPECT_EQ
(
query_transaction
->
GetResultTable
().
GetHeader
().
size
(),
1
);
for
(
const
auto
&
column
:
query_transaction
->
GetResultTable
().
GetHeader
())
{
EXPECT_EQ
(
column
.
GetName
(),
"description"
);
}
EXPECT_EQ
(
query_transaction
->
GetResultTable
().
size
(),
1
);
for
(
const
auto
&
row
:
query_transaction
->
GetResultTable
().
GetRows
())
{
EXPECT_EQ
(
row
.
GetValue
(
"description"
).
GetAsString
(),
"RT Description"
);
}
}
/*
* Test select TestProp query on record.
*/
TEST_F
(
test_select
,
test_select_testprop
)
{
const
auto
&
connection
=
caosdb
::
connection
::
ConnectionManager
::
GetDefaultConnection
();
auto
entity
=
test_select
::
CreateRecord
(
"TestProp"
,
Value
(
"val1"
));
test_select
::
InsertEntity
(
&
entity
);
auto
query_transaction
(
connection
->
CreateTransaction
());
query_transaction
->
Query
(
"SELECT TestProp FROM Record TestRT"
);
query_transaction
->
Execute
();
EXPECT_EQ
(
query_transaction
->
GetResultTable
().
GetHeader
().
size
(),
1
);
for
(
const
auto
&
column
:
query_transaction
->
GetResultTable
().
GetHeader
())
{
EXPECT_EQ
(
column
.
GetName
(),
"TestProp"
);
}
EXPECT_EQ
(
query_transaction
->
GetResultTable
().
size
(),
1
);
for
(
const
auto
&
row
:
query_transaction
->
GetResultTable
().
GetRows
())
{
EXPECT_EQ
(
row
.
GetValue
(
"TestProp"
).
GetAsString
(),
"val1"
);
}
}
/*
* Test select double value query on record.
*/
TEST_F
(
test_select
,
test_select_double
)
{
const
auto
&
connection
=
caosdb
::
connection
::
ConnectionManager
::
GetDefaultConnection
();
auto
entity
=
test_select
::
CreateRecord
(
"TestPropDouble"
,
Value
(
2.123
));
test_select
::
InsertEntity
(
&
entity
);
auto
query_transaction
(
connection
->
CreateTransaction
());
query_transaction
->
Query
(
"SELECT TestPropDouble FROM Record TestRT"
);
query_transaction
->
Execute
();
EXPECT_EQ
(
query_transaction
->
GetResultTable
().
GetHeader
().
size
(),
1
);
for
(
const
auto
&
column
:
query_transaction
->
GetResultTable
().
GetHeader
())
{
EXPECT_EQ
(
column
.
GetName
(),
"TestPropDouble"
);
}
EXPECT_EQ
(
query_transaction
->
GetResultTable
().
size
(),
1
);
for
(
const
auto
&
row
:
query_transaction
->
GetResultTable
().
GetRows
())
{
EXPECT_TRUE
(
row
.
GetValue
(
"TestPropDouble"
).
IsDouble
());
EXPECT_EQ
(
row
.
GetValue
(
"TestPropDouble"
).
GetAsDouble
(),
2.123
);
}
}
/*
* Test select unit value query on record.
*/
TEST_F
(
test_select
,
test_select_unit
)
{
const
auto
&
connection
=
caosdb
::
connection
::
ConnectionManager
::
GetDefaultConnection
();
auto
entity
=
test_select
::
CreateRecord
(
"TestPropDouble"
,
Value
(
2.123
));
test_select
::
InsertEntity
(
&
entity
);
auto
check
(
connection
->
CreateTransaction
());
check
->
Query
(
"FIND Record TestRT"
);
check
->
Execute
();
std
::
cout
<<
check
->
GetResultSet
().
at
(
0
).
ToString
()
<<
std
::
endl
;
auto
query_transaction
(
connection
->
CreateTransaction
());
query_transaction
->
Query
(
"SELECT TestPropDouble.unit FROM Record TestRT"
);
query_transaction
->
Execute
();
EXPECT_EQ
(
query_transaction
->
GetResultTable
().
GetHeader
().
size
(),
1
);
for
(
const
auto
&
column
:
query_transaction
->
GetResultTable
().
GetHeader
())
{
EXPECT_EQ
(
column
.
GetName
(),
"TestPropDouble.unit"
);
}
EXPECT_EQ
(
query_transaction
->
GetResultTable
().
size
(),
1
);
for
(
const
auto
&
row
:
query_transaction
->
GetResultTable
().
GetRows
())
{
EXPECT_FALSE
(
row
.
GetValue
(
"TestPropDouble.unit"
).
IsNull
());
EXPECT_EQ
(
row
.
GetValue
(
"TestPropDouble.unit"
).
GetAsString
(),
"m"
);
}
}
/*
* Test select int value query on record.
*/
TEST_F
(
test_select
,
test_select_int
)
{
const
auto
&
connection
=
caosdb
::
connection
::
ConnectionManager
::
GetDefaultConnection
();
auto
entity
=
test_select
::
CreateRecord
(
"TestPropInt"
,
Value
(
1234
));
test_select
::
InsertEntity
(
&
entity
);
auto
query_transaction
(
connection
->
CreateTransaction
());
query_transaction
->
Query
(
"SELECT TestPropInt FROM Record TestRT"
);
query_transaction
->
Execute
();
EXPECT_EQ
(
query_transaction
->
GetResultTable
().
GetHeader
().
size
(),
1
);
for
(
const
auto
&
column
:
query_transaction
->
GetResultTable
().
GetHeader
())
{
EXPECT_EQ
(
column
.
GetName
(),
"TestPropInt"
);
}
EXPECT_EQ
(
query_transaction
->
GetResultTable
().
size
(),
1
);
for
(
const
auto
&
row
:
query_transaction
->
GetResultTable
().
GetRows
())
{
EXPECT_TRUE
(
row
.
GetValue
(
"TestPropInt"
).
IsInt64
());
EXPECT_EQ
(
row
.
GetValue
(
"TestPropInt"
).
GetAsInt64
(),
1234
);
}
}
/*
* Test select boolean value query on record.
*/
TEST_F
(
test_select
,
test_select_boolean
)
{
const
auto
&
connection
=
caosdb
::
connection
::
ConnectionManager
::
GetDefaultConnection
();
auto
entity
=
test_select
::
CreateRecord
(
"TestPropBool"
,
Value
(
true
));
test_select
::
InsertEntity
(
&
entity
);
auto
query_transaction
(
connection
->
CreateTransaction
());
query_transaction
->
Query
(
"SELECT TestPropBool FROM Record TestRT"
);
query_transaction
->
Execute
();
EXPECT_EQ
(
query_transaction
->
GetResultTable
().
GetHeader
().
size
(),
1
);
for
(
const
auto
&
column
:
query_transaction
->
GetResultTable
().
GetHeader
())
{
EXPECT_EQ
(
column
.
GetName
(),
"TestPropBool"
);
}
EXPECT_EQ
(
query_transaction
->
GetResultTable
().
size
(),
1
);
for
(
const
auto
&
row
:
query_transaction
->
GetResultTable
().
GetRows
())
{
EXPECT_TRUE
(
row
.
GetValue
(
"TestPropBool"
).
IsBool
());
EXPECT_EQ
(
row
.
GetValue
(
"TestPropBool"
).
GetAsBool
(),
true
);
}
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment