fun testUseCase1()

in src/integrationTests/kotlin/UseCase1Test.kt [34:117]


    fun testUseCase1() {
        runBlocking(Dispatchers.EDT) {
            // this opens the editor tab, and initializes everything
            openAndInitializePlugin()

            val modelService = project.service<ModelService>()

            // this selects the last commit and sets it up to be dropped
            val commitToDrop = modelService.branchInfo.currentCommits[0]
            assertThat(commitToDrop.commit.subject).isEqualTo("my final commit")

            modelService.selectSingleCommit(commitToDrop, modelService.branchInfo)

            val dropAction = DropAction()
            val dropTestEvent = createTestEvent(dropAction)
            dropAction.update(dropTestEvent)
            assertThat(dropTestEvent.presentation.isEnabled).isTrue()

            dropAction.actionPerformed(dropTestEvent)

            val fixupCommit = modelService.branchInfo.currentCommits[1]
            modelService.selectSingleCommit(fixupCommit, modelService.branchInfo)

            val fixupAction = FixupAction()
            val fixupTestEvent = createTestEvent(fixupAction)
            fixupAction.update(fixupTestEvent)
            assertThat(fixupTestEvent.presentation.isEnabled).isTrue()

            fixupAction.actionPerformed(fixupTestEvent)

            val parentOfFixedUpCommit = modelService.branchInfo.currentCommits[1]
            modelService.selectSingleCommit(parentOfFixedUpCommit, modelService.branchInfo)

            val pickAction = PickAction()
            val pickTestEvent = createTestEvent(pickAction)
            pickAction.update(pickTestEvent)
            assertThat(pickTestEvent.presentation.isEnabled).isTrue()

            pickAction.actionPerformed(pickTestEvent)
            assertThat(modelService.branchInfo.currentCommits.size).isEqualTo(4)

            val undoAction = UndoAction()
            val undoTestEvent = createTestEvent(undoAction)
            undoAction.actionPerformed(undoTestEvent)

            assertThat(modelService.branchInfo.currentCommits.size).isEqualTo(3)

            val redoAction = RedoAction()
            val redoTestEvent = createTestEvent(redoAction)
            redoAction.actionPerformed(redoTestEvent)

            assertThat(modelService.branchInfo.currentCommits.size).isEqualTo(4)

            val reorderCommit = modelService.branchInfo.currentCommits[1]
            modelService.selectSingleCommit(reorderCommit, modelService.branchInfo)
            val keyboardShortcut = BranchNavigationListener(project)
            keyboardShortcut.altDown()
            keyboardShortcut.altDown()

            assertThat(
                modelService.branchInfo.currentCommits.map {
                    it.commit.subject
                },
            ).isEqualTo(listOf("my final commit", "code quality", "first", "i love testing"))

            val rebaseAction = StartRebaseAction()
            val rebaseEvent = createTestEvent(rebaseAction)
            rebaseAction.actionPerformed(rebaseEvent)

            Awaitility.await()
                .alias("3 commits left for drop")
                .pollInSameThread()
                .atMost(20000, TimeUnit.MILLISECONDS)
                .pollDelay(50, TimeUnit.MILLISECONDS)
                .until {
                    gitCommitsCountEquals(3)
                }
            var remainingCommitMessages = repository.getAllCommitMessages()
            remainingCommitMessages = remainingCommitMessages.filter { it != "initial" }

            assertThat(remainingCommitMessages.contains("my final commit")).isFalse()
            assertThat(remainingCommitMessages).isEqualTo(listOf("code quality", "first", "i love testing"))
        }
    }