#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2020 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Tests for model.py.
"""

import unittest
from model import Model


class ModelTest(unittest.TestCase):
  """Tests for model.py"""

  def assert_project(self, project, name, id_, summary, owners):
    self.assertEqual(project.name, name)
    self.assertEqual(project.id, id_)
    self.assertEqual(project.summary.strip(), summary)
    self.assertEqual(len(project.owners), len(owners))
    for actual, expected in zip(project.owners, owners):
      self.assertEqual(actual, expected)

  def assert_event(self, event, name, summary):
    self.assertEqual(event.name, name)
    self.assertEqual(event.summary.strip(), summary)

  def assert_metric(self, metric, name, type_, summary):
    self.assertEqual(metric.name, name)
    self.assertEqual(metric.type, type_)
    self.assertEqual(metric.summary.strip(), summary)

  def assert_model_raises(self, xml):
    raised = False
    try:
      Model(xml)
    except ValueError:
      raised = True
    self.assertTrue(raised)

  def test_valid_xml(self):
    xml = """\
          <structured-metrics>
          <project name="ProjectOne">
            <owner>test1@chromium.org</owner>
            <owner>test2@chromium.org</owner>
            <id>none</id>
            <summary> Test project. </summary>

            <event name="EventOne">
              <summary> Test event. </summary>
              <metric name="MetricOne" type="int">
                <summary> Test metric. </summary>
              </metric>
              <metric name="MetricTwo" type="hmac-string">
                <summary> Test metric. </summary>
              </metric>
            </event>

            <event name="EventTwo">
              <summary> Test event. </summary>
              <metric name="MetricThree" type="int">
                <summary> Test metric. </summary>
              </metric>
            </event>
          </project>

          <project name="ProjectTwo">
            <owner>test@chromium.org</owner>
            <id>uma</id>
            <summary> Test project. </summary>

            <event name="EventThree">
              <summary> Test event. </summary>
              <metric name="MetricFour" type="int">
                <summary> Test metric. </summary>
              </metric>
            </event>
          </project>
          </structured-metrics>"""

    data = Model(xml)

    self.assertEqual(len(data.projects), 2)
    project_one, project_two = data.projects
    self.assert_project(project_one,
         'ProjectOne', 'none', 'Test project.',
         ('test1@chromium.org', 'test2@chromium.org'))
    self.assert_project(project_two,
         'ProjectTwo', 'uma', 'Test project.',
         ('test@chromium.org',))

    self.assertEqual(len(project_one.events), 2)
    self.assertEqual(len(project_two.events), 1)
    event_one, event_two = project_one.events
    event_three, = project_two.events
    self.assert_event(event_one, 'EventOne', 'Test event.')
    self.assert_event(event_two, 'EventTwo', 'Test event.')
    self.assert_event(event_three, 'EventThree', 'Test event.')

    self.assertEqual(len(event_one.metrics), 2)
    self.assertEqual(len(event_two.metrics), 1)
    self.assertEqual(len(event_three.metrics), 1)
    metric_one, metric_two = event_one.metrics
    metric_three, = event_two.metrics
    metric_four, = event_three.metrics
    self.assert_metric(metric_one, 'MetricOne', 'int', 'Test metric.')
    self.assert_metric(metric_two, 'MetricTwo', 'hmac-string', 'Test metric.')
    self.assert_metric(metric_three, 'MetricThree', 'int', 'Test metric.')
    self.assert_metric(metric_four, 'MetricFour', 'int', 'Test metric.')

  def test_owners_validation(self):
    # No owner for project.
    self.assert_model_raises("""\
        <structured-metrics>
        <project name="project">
        <id>uma</id>
        <summary> Test project. </summary>
        <event name="EventThree">
          <summary> Test event. </summary>
          <metric name="MetricFour" type="int">
            <summary> Test metric. </summary>
          </metric>
        </event>
        </project>
        </structured-metrics>""")

    # Owner is username not email.
    self.assert_model_raises("""\
        <structured-metrics>
        <project name="project">
          <owner>test@</owner>
          <id>uma</id>
          <summary> Test project. </summary>
          <event name="EventThree">
            <summary> Test event. </summary>
            <metric name="MetricFour" type="int">
              <summary> Test metric. </summary>
            </metric>
          </event>
        </project>
        </structured-metrics>""")

  def test_id_validation(self):
    # Missing ID
    self.assert_model_raises("""\
        <structured-metrics>
        <project name="MyProject">
          <owner>test@chromium.org</owner>
          <summary> Test project. </summary>
          <event name="MyEvent">
            <summary> Test event. </summary>
            <metric name="MyMetric" type="int">
              <summary> Test metric. </summary>
            </metric>
          </event>
        </project>
        </structured-metrics>""")

    # Invalid ID
    self.assert_model_raises("""\
        <structured-metrics>
        <project name="MyProject">
          <owner>test@chromium.org</owner>
          <id>invalid value</id>
          <summary> Test project. </summary>
          <event name="MyEvent">
            <summary> Test event. </summary>
            <metric name="MyMetric" type="int">
              <summary> Test metric. </summary>
            </metric>
          </event>
        </project>
        </structured-metrics>""")

  def test_type_validation(self):
    # Missing type
    self.assert_model_raises("""\
        <structured-metrics>
        <project name="MyProject">
          <owner>test@chromium.org</owner>
          <id>none</id>
          <summary> Test project. </summary>
          <event name="MyEvent">
            <summary> Test event. </summary>
            <metric name="MyMetric">
              <summary> Test metric. </summary>
            </metric>
          </event>
        </project>
        </structured-metrics>""")

    # Invalid type
    self.assert_model_raises("""\
        <structured-metrics>
        <project name="MyProject">
          <owner>test@chromium.org</owner>
          <id>none</id>
          <summary> Test project. </summary>
          <event name="MyEvent">
            <summary> Test event. </summary>
            <metric name="MyMetric" type="invalid value">
              <summary> Test metric. </summary>
            </metric>
          </event>
        </project>
        </structured-metrics>""")

  def test_duplicate_summaries(self):
    self.assert_model_raises("""\
        <structured-metrics>
        <project name="MyProject">
          <owner>test@chromium.org</owner>
          <id>none</id>
          <summary> Test project. </summary>
          <summary> Test project. </summary>
          <event name="MyEvent">
            <summary> Test event. </summary>
            <metric name="MyMetric" type="int">
              <summary> Test metric. </summary>
            </metric>
          </event>
        </project>
        </structured-metrics>""")

  def test_duplicate_project_names(self):
    # Two projects with name "Duplicate"
    self.assert_model_raises("""\
        <structured-metrics>
        <project name="Duplicate">
          <owner>test@</owner>
          <id>uma</id>
          <summary> Test project. </summary>
          <event name="MyEvent">
            <summary> Test event. </summary>
            <metric name="MyMetric" type="int">
              <summary> Test metric. </summary>
            </metric>
          </event>
        </project>
        <project name="Duplicate">
          <owner>test@</owner>
          <id>uma</id>
          <summary> Test project. </summary>
          <event name="MyEvent">
            <summary> Test event. </summary>
            <metric name="MyMetric" type="int">
              <summary> Test metric. </summary>
            </metric>
          </event>
        </project>
        </structured-metrics>""")

  def test_duplicate_event_names(self):
    # Two events with name "Duplicate"
    self.assert_model_raises("""\
        <structured-metrics>
        <project name="MyProject">
          <owner>test@</owner>
          <id>uma</id>
          <summary> Test project. </summary>
          <event name="Duplicate">
            <summary> Test event. </summary>
            <metric name="MyMetric" type="int">
              <summary> Test metric. </summary>
            </metric>
          </event>
          <event name="Duplicate">
            <summary> Test event. </summary>
            <metric name="MyMetric" type="int">
              <summary> Test metric. </summary>
            </metric>
          </event>
        </project>
        </structured-metrics>""")

  def test_duplicate_metric_names(self):
    # Two metrics with name "Duplicate"
    self.assert_model_raises("""\
        <structured-metrics>
        <project name="MyProject">
          <owner>test@</owner>
          <id>uma</id>
          <summary> Test project. </summary>
          <event name="MyEvent">
            <summary> Test event. </summary>
            <metric name="Duplicate" type="int">
              <summary> Test metric. </summary>
            </metric>
            <metric name="Duplicate" type="int">
              <summary> Test metric. </summary>
            </metric>
          </event>
        </project>
        </structured-metrics>""")


if __name__ == '__main__':
  unittest.main()
