# -*- coding: utf-8 -*-
# SPDX-License-Identifier: MIT

from mock import patch

from module_build_service.common import models
from module_build_service.common.config import conf
from module_build_service.scheduler.db_session import db_session
from tests import make_module_in_db


@patch('module_build_service.common.messaging.publish')
def test_send_messages_after_several_state_transitions(mock_publish, require_empty_database):
    """
    Ensure all module build state change messages are sent after multiple
    ModuleBuild.transitions are committed at once
    """
    build = make_module_in_db("testmodule:1:2:c3")

    build.transition(db_session, conf, models.BUILD_STATES["wait"])
    build.transition(db_session, conf, models.BUILD_STATES["done"])

    assert 0 == mock_publish.call_count
    db_session.commit()
    assert 2 == mock_publish.call_count
