Skip to content

Commit

Permalink
Updates for reporter plugin
Browse files Browse the repository at this point in the history
Reporter Plugin
  changed VERBOSE to verbose_mode attribute
  update
    moved setting of values to outside of verbose_mode printing
Test
  full coverage testing for both functions in verbose and not verbose
  • Loading branch information
asgibson committed Mar 13, 2024
1 parent 556b85f commit b4ac8e1
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 6 deletions.
12 changes: 6 additions & 6 deletions plugins/reporter/reporter_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,28 +9,28 @@

from onair.src.ai_components.ai_plugin_abstract.ai_plugin import AIPlugin

VERBOSE = False

class Plugin(AIPlugin):
verbose_mode = False

def update(self, low_level_data=[], high_level_data={}):
"""
Reporter outputs that it is updating and outputs known headers and
given low and high level data.
"""
self.low_level_data = low_level_data
self.high_level_data = high_level_data
print(f"{self.component_name}: UPDATE")
if VERBOSE:
if self.verbose_mode:
print(f" : headers {self.headers}")
print(f" : low_level_data {low_level_data.__class__} = '{low_level_data}'")
self.low_level_data = low_level_data
print(f" : high_level_data {high_level_data.__class__} = '{high_level_data}'")
self.high_level_data = high_level_data

def render_reasoning(self):
"""
Reporter outputs that it is reasoning and gives its known low and
high level data.
"""
print(f"{self.component_name}: RENDER_REASONING")
if VERBOSE:
if self.verbose_mode:
print(f" : My low_level_data is {self.low_level_data}")
print(f" : My high_level_data is {self.high_level_data}")
98 changes: 98 additions & 0 deletions test/plugins/reporter/test_reporter_plugin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# GSC-19165-1, "The On-Board Artificial Intelligence Research (OnAIR) Platform"
#
# Copyright © 2023 United States Government as represented by the Administrator of
# the National Aeronautics and Space Administration. No copyright is claimed in the
# United States under Title 17, U.S. Code. All Other Rights Reserved.
#
# Licensed under the NASA Open Source Agreement version 1.3
# See "NOSA GSC-19165-1 OnAIR.pdf"

""" Test Reporter Plugin Functionality """
import pytest
from unittest.mock import MagicMock
import onair

from plugins.reporter import reporter_plugin
from plugins.reporter.reporter_plugin import Plugin as Reporter

# test update
def test_Reporter_update_saves_given_args_and_only_outputs_update_when_not_verbose_mode(mocker):
# Arrange
arg_low_level_data = MagicMock(name='arg_low_level_data')
arg_high_level_data = MagicMock(name='arg_high_level_data')

cut = Reporter.__new__(Reporter)
cut.component_name = MagicMock(name='fake.cut.component_name')

mocker.patch(reporter_plugin.__name__ + '.print')

# Act
cut.update(arg_low_level_data, arg_high_level_data)

# Assert
assert reporter_plugin.print.call_count == 1
assert reporter_plugin.print.call_args_list[0].args == (f"{cut.component_name}: UPDATE", )
assert cut.low_level_data == arg_low_level_data
assert cut.high_level_data == arg_high_level_data

def test_Reporter_update_saves_given_args_and_outputs_all_info_when_verbose_mode(mocker):
# Arrange
arg_low_level_data = MagicMock(name='arg_low_level_data')
arg_high_level_data = MagicMock(name='arg_high_level_data')

cut = Reporter.__new__(Reporter)
cut.component_name = MagicMock(name='fake.cut.component_name')
cut.headers = MagicMock(name='fake.cut.headers')
cut.verbose_mode = True

mocker.patch(reporter_plugin.__name__ + '.print')

# Act
cut.update(arg_low_level_data, arg_high_level_data)

# Assert
assert reporter_plugin.print.call_count == 4
assert reporter_plugin.print.call_args_list[0].args == (f"{cut.component_name}: UPDATE", )
assert reporter_plugin.print.call_args_list[1].args == (f" : headers {cut.headers}", )
assert reporter_plugin.print.call_args_list[2].args == (f" : low_level_data {arg_low_level_data.__class__} = '{arg_low_level_data}'", )
assert reporter_plugin.print.call_args_list[3].args == (f" : high_level_data {arg_high_level_data.__class__} = '{arg_high_level_data}'", )
assert cut.low_level_data == arg_low_level_data
assert cut.high_level_data == arg_high_level_data

# test render_reasoning
def test_Reporter_render_reasoning_only_outputs_render_reasoning_when_not_verbose_mode(mocker):
# Arrange
cut = Reporter.__new__(Reporter)
cut.component_name = MagicMock(name='fake.cut.component_name')
cut.verbose_mode = False

mocker.patch(reporter_plugin.__name__ + '.print')

# Act
cut.render_reasoning()

# Assert
assert reporter_plugin.print.call_count == 1
assert reporter_plugin.print.call_args_list[0].args == (f"{cut.component_name}: RENDER_REASONING", )

def test_Reporter_render_reasoning_outputs_all_info_when_verbose_mode(mocker):
# Arrange
cut = Reporter.__new__(Reporter)
cut.component_name = MagicMock(name='fake.cut.component_name')
fake_low_level_data = MagicMock(name='fake_low_level_data')
cut.low_level_data = fake_low_level_data
fake_high_level_data = MagicMock(name='fake_high_level_data')
cut.high_level_data = fake_high_level_data
cut.verbose_mode = True

mocker.patch(reporter_plugin.__name__ + '.print')

# Act
cut.render_reasoning()

# Assert
assert reporter_plugin.print.call_count == 3
assert reporter_plugin.print.call_args_list[0].args == (f"{cut.component_name}: RENDER_REASONING", )
assert reporter_plugin.print.call_args_list[1].args == (f" : My low_level_data is {fake_low_level_data}", )
assert reporter_plugin.print.call_args_list[2].args == (f" : My high_level_data is {fake_high_level_data}", )

0 comments on commit b4ac8e1

Please sign in to comment.