Coverage for python/lsst/obs/base/cli/butler_cmd_test.py : 54%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# This file is part of obs_base.
2#
3# Developed for the LSST Data Management System.
4# This product includes software developed by the LSST Project
5# (https://www.lsst.org).
6# See the COPYRIGHT file at the top-level directory of this distribution
7# for details of code ownership.
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program. If not, see <https://www.gnu.org/licenses/>.
22"""Base class for writing CLI butler command tests.
23"""
25__all__ = ("ButlerCmdTestBase",)
27import abc
28import click
29import click.testing
31from lsst.daf.butler.cli import butler
32from lsst.utils import doImport
35class ButlerCmdTestBase(metaclass=abc.ABCMeta):
36 """Base class for tests of butler command line interface subcommands.
37 Subclass from this, then `unittest.TestCase` to get a working test suite.
38 """
40 @property
41 @abc.abstractmethod
42 def instrumentClassName(self):
43 """The fully qualified instrument class name.
45 Returns
46 -------
47 `str`
48 The fully qualified instrument class name.
49 """
50 pass
52 @property
53 def instrument(self):
54 """The instrument class."""
55 return doImport(self.instrumentClassName)
57 @property
58 def instrumentName(self):
59 """The name of the instrument.
61 Returns
62 -------
63 `str`
64 The name of the instrument.
65 """
66 return self.instrument.getName()
68 def test_cli(self):
69 runner = click.testing.CliRunner()
70 with runner.isolated_filesystem():
71 result = runner.invoke(butler.cli, ["create", "here"])
72 self.assertEqual(result.exit_code, 0, f"output: {result.output} exception: {result.exception}")
73 result = runner.invoke(butler.cli, ["register-instrument",
74 "here",
75 "-i", self.instrumentClassName])
76 self.assertEqual(result.exit_code, 0, f"output: {result.output} exception: {result.exception}")
77 result = runner.invoke(butler.cli, ["write-curated-calibrations",
78 "here",
79 "-i", self.instrumentName,
80 "--output-run", "output_run"])
81 self.assertEqual(result.exit_code, 0, f"output: {result.output} exception: {result.exception}")