def test_status_with_multiple_branches(caplog, store_mock): """Support having multiple branches.""" caplog.set_level(logging.INFO, logger="charmcraft.commands") tstamp_with_timezone = parser.parse('2020-07-03T20:30:40Z') channel_map = [ Release(revision=5, channel='latest/beta', expires_at=None), Release(revision=12, channel='latest/beta/branch-1', expires_at=tstamp_with_timezone), Release(revision=15, channel='latest/beta/branch-2', expires_at=tstamp_with_timezone), ] channels = _build_channels() channels.extend([ Channel(name='latest/beta/branch-1', fallback='latest/beta', track='latest', risk='beta', branch='branch-1'), Channel(name='latest/beta/branch-2', fallback='latest/beta', track='latest', risk='beta', branch='branch-2'), ]) revisions = [ _build_revision(revno=5, version='5.1'), _build_revision(revno=12, version='ver.12'), _build_revision(revno=15, version='15.0.0'), ] store_mock.list_releases.return_value = (channel_map, channels, revisions) args = Namespace(name='testcharm') StatusCommand('group').run(args) assert store_mock.mock_calls == [ call.list_releases('testcharm'), ] expected = [ "Track Channel Version Revision Expires at", "latest stable - -", " candidate - -", " beta 5.1 5", " edge ↑ ↑", " beta/branch-1 ver.12 12 2020-07-03T20:30:40+00:00", " beta/branch-2 15.0.0 15 2020-07-03T20:30:40+00:00", ] assert expected == [rec.message for rec in caplog.records]
def _build_channels(track='latest'): """Helper to build simple channels structure.""" channels = [] risks = ['stable', 'candidate', 'beta', 'edge'] for risk, fback in zip(risks, [None] + risks): name = "/".join((track, risk)) fallback = None if fback is None else "/".join((track, fback)) channels.append(Channel(name=name, fallback=fallback, track=track, risk=risk, branch=None)) return channels