Skip to content

Commit

Permalink
DeleteFileAction: New action for DuplicateFileBear
Browse files Browse the repository at this point in the history
Added a new action DeleteFileAction for DuplicateFileBear. Two instances
of this action are added corresponding to the files. On applying it will
delete one the file.
  • Loading branch information
akshatkarani committed Aug 25, 2019
1 parent e7c209f commit 2020472
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 1 deletion.
5 changes: 4 additions & 1 deletion bears/general/DuplicateFileBear.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from coalib.bears.GlobalBear import GlobalBear
from coalib.results.Result import Result
from coalib.results.RESULT_SEVERITY import RESULT_SEVERITY
from bears.general.actions.DeleteFileAction import DeleteFileAction


class DuplicateFileBear(GlobalBear):
Expand Down Expand Up @@ -35,4 +36,6 @@ def run(self):
' to File ' + second_file_name)
yield Result(origin=self,
message=message,
severity=RESULT_SEVERITY.INFO)
severity=RESULT_SEVERITY.INFO,
actions=[DeleteFileAction(first_file_name),
DeleteFileAction(second_file_name)])
26 changes: 26 additions & 0 deletions bears/general/actions/DeleteFileAction.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import os
from coalib.results.result_actions.ResultAction import ResultAction


class DeleteFileAction(ResultAction):
"""
Deletes a file
"""

SUCCESS_MESSAGE = 'File deleted successfully.'

def __init__(self, filename):
self.filename = filename
self.description = ('Delete {} [Note: This will '
'delete the file permanently]').format(filename)

@staticmethod
def is_applicable(result,
original_file_dict,
file_diff_dict,
applied_actions=()):
return 'DeleteFileAction' not in applied_actions

def apply(self, result, original_file_dict, file_diff_dict):
os.remove(self.filename)
return file_diff_dict
Empty file.
35 changes: 35 additions & 0 deletions tests/general/actions/DeleteFileActionTest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import os
import unittest
from unittest.mock import patch
from coalib.results.Result import Result
from bears.general.actions.DeleteFileAction import DeleteFileAction
from coala_utils.ContextManagers import retrieve_stdout


def get_path(file):
return os.path.join(
os.getcwd(), 'tests', 'general', 'duplicate_test_files', file)


class DeleteFileActionTest(unittest.TestCase):

def setUp(self):
self.file1 = 'complexFirst.txt'
self.file2 = 'complexSecond.txt'
self.result = Result('origin', 'message')
self.uut1 = DeleteFileAction(self.file1)
self.uut2 = DeleteFileAction(self.file2)

def test_is_applicable(self):
self.assertTrue(self.uut1.is_applicable(self.result, {}, {}))
self.assertFalse(self.uut1.is_applicable(
self.result, {}, {}, applied_actions=('DeleteFileAction')))

def test_apply(self):
with retrieve_stdout() as stdout:
patcher = ('bears.general.actions.DeleteFileAction.'
'os.remove')
with patch(patcher):
ret = self.uut1.apply(self.result, {}, {'file': 'diff'})
self.assertEqual(ret, {'file': 'diff'})
self.assertEqual(stdout.getvalue(), '')
Empty file.

0 comments on commit 2020472

Please sign in to comment.