def test_post(self, mock_pull):
        request = testing.DummyRequest({})
        request.route_url = lambda route, name: 'foo'
        repo_name = os.path.basename(self.workspace.working_dir)
        request.matchdict = {
            'name': repo_name,
        }
        request.params = {
            'branch': 'foo',
            'remote': 'bar',
        }
        resource = RepositoryResource(request)

        with patch.object(request.registry, 'notify') as mocked_notify:
            resource.post()
            mock_pull.assert_called_with(branch_name='foo', remote_name='bar')
            (call1, call2) = mocked_notify.call_args_list
            (event, ) = call1[0]
            self.assertIsInstance(event, RepositoryUpdated)
            self.assertEqual(event.repo, self.workspace.repo)
            self.assertEqual(event.branch, 'foo')
            self.assertTrue(event.changes)
            (event, ) = call2[0]
            self.assertEqual(event.event_type, 'repo.push')
            self.assertEqual(event.payload, {
                'repo': repo_name,
                'url': 'foo',
            })
    def test_pull_renames(self):
        upstream_workspace = self.create_upstream_for(self.workspace)
        self.add_schema(upstream_workspace, TestPerson)
        self.add_mapping(upstream_workspace, TestPerson)
        upstream_workspace.sm.store_data('README.rst', 'the readme',
                                         'Writing the readme.')
        self.workspace.pull()
        # do the rename
        upstream_workspace.repo.index.move(['README.rst', 'README.txt'])
        upstream_workspace.repo.index.commit('Renaming rst to txt.')

        repo_name = os.path.basename(self.workspace.working_dir)
        request = testing.DummyRequest({})
        request.route_url = lambda route, name: 'foo'
        request.matchdict = {
            'name': repo_name,
        }

        resource = RepositoryResource(request)
        [diff] = resource.post()
        self.assertEqual(diff, {
            'type': 'R',
            'rename_from': 'README.rst',
            'rename_to': 'README.txt',
        })
    def test_pull_additions(self):
        upstream_workspace = self.create_upstream_for(self.workspace)
        self.add_schema(upstream_workspace, TestPerson)
        self.add_mapping(upstream_workspace, TestPerson)
        person1 = TestPerson({'age': 1, 'name': 'person1'})
        upstream_workspace.save(person1, 'Adding person1.')

        repo_name = os.path.basename(self.workspace.working_dir)
        request = testing.DummyRequest({})
        request.route_url = lambda route, name: 'foo'
        request.matchdict = {
            'name': repo_name,
        }

        resource = RepositoryResource(request)
        [diff] = resource.post()
        self.assertEqual(diff, {
            'type': 'A',
            'path': upstream_workspace.sm.git_name(person1),
        })