def test_launch(self):
        instance = boto.ec2.instance.Instance()
        instance.id = TEST_INSTANCE_ID
        instance.image_id = TEST_IMAGE_ID
        reservation = boto.ec2.instance.Reservation()
        reservation.instances = [instance]

        self.mox.StubOutWithMock(forms, 'get_key_pair_choices')
        self.mox.StubOutWithMock(forms, 'get_instance_type_choices')
        self.mox.StubOutWithMock(self.project, 'run_instances')

        forms.get_key_pair_choices(self.project).AndReturn(
                self.create_key_pair_choices([TEST_KEY]))
        forms.get_instance_type_choices().AndReturn(
                self.create_instance_type_choices())
        self.project.run_instances(TEST_IMAGE_ID,
                                   addressing_type=mox.IgnoreArg(),
                                   key_name=TEST_KEY,
                                   user_data='',
                                   instance_type='m1.medium',
                                   min_count='1',
                                   max_count='1').AndReturn(reservation)
        self.mox.ReplayAll()

        url = reverse('nova_images_launch', args=[TEST_PROJECT, TEST_IMAGE_ID])
        data = {'key_name': TEST_KEY,
                'count': '1',
                'size': 'm1.medium',
                'user_data': ''}
        res = self.client.post(url, data)
        self.assertRedirectsNoFollow(res, reverse('nova_instances',
                                                  args=[TEST_PROJECT]))
        self.mox.VerifyAll()
    def test_index(self):
        self.mox.StubOutWithMock(self.project, 'get_images')
        self.mox.StubOutWithMock(forms, 'get_key_pair_choices')
        self.mox.StubOutWithMock(forms, 'get_instance_type_choices')

        self.project.get_images().AndReturn([])
        forms.get_key_pair_choices(self.project).AndReturn([])
        forms.get_instance_type_choices().AndReturn([])

        self.mox.ReplayAll()

        res = self.client.get(reverse('nova_images', args=[TEST_PROJECT]))
        self.assertEqual(res.status_code, 200)
        self.assertTemplateUsed(res, 'django_nova/images/index.html')
        self.assertEqual(len(res.context['image_lists']), 3)

        self.mox.VerifyAll()
    def test_launch_form(self):
        self.mox.StubOutWithMock(self.project, 'get_image')
        self.mox.StubOutWithMock(forms, 'get_key_pair_choices')
        self.mox.StubOutWithMock(forms, 'get_instance_type_choices')

        self.project.get_image(TEST_IMAGE_ID).AndReturn(self.ami)
        forms.get_key_pair_choices(self.project).AndReturn([])
        forms.get_instance_type_choices().AndReturn([])

        self.mox.ReplayAll()

        args = [TEST_PROJECT, TEST_IMAGE_ID]
        res = self.client.get(reverse('nova_images_launch', args=args))
        self.assertEqual(res.status_code, 200)
        self.assertTemplateUsed(res, 'django_nova/images/launch.html')
        self.assertEqual(res.context['ami'].id, TEST_IMAGE_ID)

        self.mox.VerifyAll()
    def test_detail(self):
        self.mox.StubOutWithMock(self.project, 'get_images')
        self.mox.StubOutWithMock(self.project, 'get_image')
        self.mox.StubOutWithMock(shortcuts, 'get_user_image_permissions')
        self.mox.StubOutWithMock(forms, 'get_key_pair_choices')
        self.mox.StubOutWithMock(forms, 'get_instance_type_choices')

        self.project.get_images().AndReturn([self.ami])
        self.project.get_image(TEST_IMAGE_ID).AndReturn(self.ami)
        forms.get_key_pair_choices(self.project).AndReturn(
            self.create_key_pair_choices([TEST_KEY]))
        forms.get_instance_type_choices().AndReturn(
            self.create_instance_type_choices())

        self.mox.ReplayAll()

        res = self.client.get(reverse('nova_images_detail',
                                      args=[TEST_PROJECT, TEST_IMAGE_ID]))
        self.assertEqual(res.status_code, 200)
        self.assertTemplateUsed(res, 'django_nova/images/index.html')
        self.assertEqual(res.context['ami'].id, TEST_IMAGE_ID)

        self.mox.VerifyAll()