Skip to content
Snippets Groups Projects
test_caosdb.m 3.31 KiB
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
Timm Fitschen's avatar
Timm Fitschen committed

%% Only test the connection
function test_connection()
  % Default connection
  c1 = Caosdb();
  info = c1.info();

  % another working connection
  c2 = Caosdb(connection = "local-caosdb-admin");
  c2.info();

  % This connection should fail
Daniel Hornung's avatar
Daniel Hornung committed
  % 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.
  if moxunit_util_platform_is_octave()
Daniel Hornung's avatar
Daniel Hornung committed
    assertExceptionThrown(@non_existing_connection);
Daniel Hornung's avatar
Daniel Hornung committed
    assertExceptionThrown(@non_existing_connection,"16");
Daniel Hornung's avatar
Daniel Hornung committed
  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");
  props = violin.get_properties();
  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
function test_retrieve_multiple()
  % Retrieve two entities
  c = Caosdb();
  violin = c.retrieve("120"){1};
  collection = c.retrieve({"120", "119"});
  assertEqual(length(collection), 2);
  assertEqual(numel(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