/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "unit/TestBase.h"
#include "unit/Catch.h"
#include "utils/OpenTelemetryLogDataModelUtils.h"

namespace utils = org::apache::nifi::minifi::utils;

// TODO(mzink) move to extension-utils-tests

TEST_CASE("OpenTelemetryLogDataModel tests", "[testnetworkadapter]") {
  rapidjson::Document document(rapidjson::kObjectType);
  utils::OpenTelemetryLogDataModel::appendEventInformation(document, "testevent");
  utils::OpenTelemetryLogDataModel::appendHostInformation(document);
  utils::OpenTelemetryLogDataModel::appendBody(document);
  REQUIRE(document.HasMember("Body"));
  REQUIRE(document.HasMember("Name"));
  REQUIRE(document.HasMember("Timestamp"));
  REQUIRE(document.HasMember("Resource"));
}
