Newer
Older
function test_suite=test_caosdb()
try % assignment of 'localfunctions' is necessary in Matlab >= 2016
test_functions=localfunctions();
catch % no problem; early Matlab versions can use initTestSuite fine
end
initTestSuite;
end
%% Only test the connection
% Default connection
c1 = Caosdb();
info = c1.info();
% another working connection
c2 = Caosdb(connection = "local-caosdb-admin");
c2.info();
% This connection should fail
% c3 = Caosdb(connection = "does-not-exist");
% Error message is:
% maox_info: The ConnectionManager does not know any connection of this name.
% No connection named 'does-not-exist' present.
assertExceptionThrown(@non_existing_connection,"16");
expected_msg = ...
strjoin(
{"maox_info: The ConnectionManager does not know any connection of this name.",
"No connection named 'does-not-exist' present."}, "\n");
assertEqual(lasterror().message, expected_msg)
end
function info = non_existing_connection()
c = Caosdb(connection = "does-not-exist");
info = c.info();
%% Test retrieval of a single Entity
function test_retrieve_single()
% Default connection configuration is sufficient.
c = Caosdb();
% Retrieve a single entity
violin = c.retrieve("120"){1};
% Check content
assertEqual(violin.name, "Sherlock Holmes' violin");
assertEqual(props{1}.name, "price");
assertEqual(props{1}.value, 814873.0);
assertEqual(props{2}.name, "Manufacturer");
assertEqual(props{2}.value, "119");
assertFalse(violin.has_errors());
assertFalse(violin.has_warnings());
assertFalse(violin.has_infos());
end
%% Test retrieval of multiple Entities
c = Caosdb();
violin = c.retrieve("120"){1};
collection = c.retrieve({"120", "119"});
assertEqual(length(collection), 2);
assertEqual(collection{1}.id, violin.id);
assertEqual(collection{1}.name, violin.name);
assertEqual(collection{2}.name, "Antonio Stradivari");
props = collection{2}.get_properties();
assertEqual(props{1}.name, "latitude");
assertEqual(props{1}.value, 45.07353);
assertEqual(props{2}.name, "longitude");
assertEqual(props{2}.value, 7.68315);
%% Test retrieval with errors
function test_retrieve_failure()
% Default connection configuration is sufficient.
c = Caosdb();
% Retrieve a non-existing entity.
does_not_exist = c.retrieve("i-do-not-exist"){1};
assertTrue(does_not_exist.has_errors());
error = does_not_exist.get_errors(){1};
assertEqual(typeinfo(error.code), "int64 scalar");
assertEqual(error.code, int64(2));
assertEqual(error.description, "Entity does not exist.");
% Call retrieve with wrong arguments.
% (Only m file level, no invalid arguments should make it to the mex function.)
assertExceptionThrown(@()c.retrieve(120), "maox:InvalidArgument");
assertExceptionThrown(@()c.retrieve({120}), "maox:InvalidArgument");
assertExceptionThrown(@()c.retrieve({"120"}, {}), "maox:InvalidArgument");
assertExceptionThrown(@()c.retrieve({"120"}, {120}), "maox:InvalidArgument");
assertExceptionThrown(@()c.retrieve({"120"}, {"120", 120}), "maox:InvalidArgument");
end