-
-
Notifications
You must be signed in to change notification settings - Fork 13.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1486 from hlohaus/copilot
Improve tests
- Loading branch information
Showing
13 changed files
with
212 additions
and
100 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
import unittest | ||
from .asyncio import * | ||
from .backend import * | ||
from .main import * | ||
|
||
unittest.main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
from .include import DEFAULT_MESSAGES | ||
import asyncio | ||
import nest_asyncio | ||
import unittest | ||
import g4f | ||
from g4f import ChatCompletion | ||
from .mocks import ProviderMock, AsyncProviderMock, AsyncGeneratorProviderMock | ||
|
||
class TestChatCompletion(unittest.TestCase): | ||
|
||
async def run_exception(self): | ||
return ChatCompletion.create(g4f.models.default, DEFAULT_MESSAGES, AsyncProviderMock) | ||
|
||
def test_exception(self): | ||
self.assertRaises(g4f.errors.NestAsyncioError, asyncio.run, self.run_exception()) | ||
|
||
def test_create(self): | ||
result = ChatCompletion.create(g4f.models.default, DEFAULT_MESSAGES, AsyncProviderMock) | ||
self.assertEqual("Mock",result) | ||
|
||
def test_create_generator(self): | ||
result = ChatCompletion.create(g4f.models.default, DEFAULT_MESSAGES, AsyncGeneratorProviderMock) | ||
self.assertEqual("Mock",result) | ||
|
||
class TestChatCompletionAsync(unittest.IsolatedAsyncioTestCase): | ||
|
||
async def test_base(self): | ||
result = await ChatCompletion.create_async(g4f.models.default, DEFAULT_MESSAGES, ProviderMock) | ||
self.assertEqual("Mock",result) | ||
|
||
async def test_async(self): | ||
result = await ChatCompletion.create_async(g4f.models.default, DEFAULT_MESSAGES, AsyncProviderMock) | ||
self.assertEqual("Mock",result) | ||
|
||
async def test_create_generator(self): | ||
result = await ChatCompletion.create_async(g4f.models.default, DEFAULT_MESSAGES, AsyncGeneratorProviderMock) | ||
self.assertEqual("Mock",result) | ||
|
||
class TestChatCompletionNestAsync(unittest.IsolatedAsyncioTestCase): | ||
|
||
def setUp(self) -> None: | ||
nest_asyncio.apply() | ||
|
||
async def test_create(self): | ||
result = await ChatCompletion.create_async(g4f.models.default, DEFAULT_MESSAGES, ProviderMock) | ||
self.assertEqual("Mock",result) | ||
|
||
async def test_nested(self): | ||
result = ChatCompletion.create(g4f.models.default, DEFAULT_MESSAGES, AsyncProviderMock) | ||
self.assertEqual("Mock",result) | ||
|
||
async def test_nested_generator(self): | ||
result = ChatCompletion.create(g4f.models.default, DEFAULT_MESSAGES, AsyncGeneratorProviderMock) | ||
self.assertEqual("Mock",result) | ||
|
||
if __name__ == '__main__': | ||
unittest.main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
from . import include | ||
import unittest | ||
from unittest.mock import MagicMock | ||
from .mocks import ProviderMock | ||
import g4f | ||
from g4f.gui.server.backend import Backend_Api, get_error_message | ||
|
||
class TestBackendApi(unittest.TestCase): | ||
|
||
def setUp(self): | ||
self.app = MagicMock() | ||
self.api = Backend_Api(self.app) | ||
|
||
def test_version(self): | ||
response = self.api.get_version() | ||
self.assertIn("version", response) | ||
self.assertIn("latest_version", response) | ||
|
||
def test_get_models(self): | ||
response = self.api.get_models() | ||
self.assertIsInstance(response, list) | ||
self.assertTrue(len(response) > 0) | ||
|
||
def test_get_providers(self): | ||
response = self.api.get_providers() | ||
self.assertIsInstance(response, list) | ||
self.assertTrue(len(response) > 0) | ||
|
||
class TestUtilityFunctions(unittest.TestCase): | ||
|
||
def test_get_error_message(self): | ||
g4f.debug.last_provider = ProviderMock | ||
exception = Exception("Message") | ||
result = get_error_message(exception) | ||
self.assertEqual("ProviderMock: Exception: Message", result) | ||
|
||
if __name__ == '__main__': | ||
unittest.main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
import sys | ||
import pathlib | ||
|
||
sys.path.append(str(pathlib.Path(__file__).parent.parent.parent)) | ||
|
||
import g4f | ||
|
||
g4f.debug.logging = False | ||
g4f.debug.version_check = False | ||
|
||
DEFAULT_MESSAGES = [{'role': 'user', 'content': 'Hello'}] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,75 +1,37 @@ | ||
import sys | ||
import pathlib | ||
from .include import DEFAULT_MESSAGES | ||
import unittest | ||
from unittest.mock import MagicMock | ||
|
||
sys.path.append(str(pathlib.Path(__file__).parent.parent.parent)) | ||
|
||
import asyncio | ||
import g4f | ||
from g4f import ChatCompletion, get_last_provider | ||
from g4f.gui.server.backend import Backend_Api, get_error_message | ||
from g4f.base_provider import BaseProvider | ||
|
||
g4f.debug.logging = False | ||
g4f.debug.version_check = False | ||
|
||
class MockProvider(BaseProvider): | ||
working = True | ||
|
||
def create_completion( | ||
model, messages, stream, **kwargs | ||
): | ||
yield "Mock" | ||
|
||
async def create_async( | ||
model, messages, **kwargs | ||
): | ||
return "Mock" | ||
|
||
class TestBackendApi(unittest.TestCase): | ||
|
||
def setUp(self): | ||
self.app = MagicMock() | ||
self.api = Backend_Api(self.app) | ||
|
||
def test_version(self): | ||
response = self.api.get_version() | ||
self.assertIn("version", response) | ||
self.assertIn("latest_version", response) | ||
from g4f.Provider import RetryProvider | ||
from .mocks import ProviderMock | ||
|
||
class TestChatCompletion(unittest.TestCase): | ||
|
||
def test_create_default(self): | ||
messages = [{'role': 'user', 'content': 'Hello'}] | ||
result = ChatCompletion.create(g4f.models.default, messages) | ||
result = ChatCompletion.create(g4f.models.default, DEFAULT_MESSAGES) | ||
if "Good" not in result and "Hi" not in result: | ||
self.assertIn("Hello", result) | ||
|
||
def test_get_last_provider(self): | ||
messages = [{'role': 'user', 'content': 'Hello'}] | ||
ChatCompletion.create(g4f.models.default, messages, MockProvider) | ||
self.assertEqual(get_last_provider(), MockProvider) | ||
|
||
|
||
def test_bing_provider(self): | ||
messages = [{'role': 'user', 'content': 'Hello'}] | ||
provider = g4f.Provider.Bing | ||
result = ChatCompletion.create(g4f.models.default, messages, provider) | ||
result = ChatCompletion.create(g4f.models.default, DEFAULT_MESSAGES, provider) | ||
self.assertIn("Bing", result) | ||
|
||
class TestChatCompletionAsync(unittest.IsolatedAsyncioTestCase): | ||
|
||
async def test_async(self): | ||
messages = [{'role': 'user', 'content': 'Hello'}] | ||
result = await ChatCompletion.create_async(g4f.models.default, messages, MockProvider) | ||
self.assertEqual("Mock", result) | ||
class TestGetLastProvider(unittest.TestCase): | ||
|
||
class TestUtilityFunctions(unittest.TestCase): | ||
|
||
def test_get_error_message(self): | ||
g4f.debug.last_provider = g4f.Provider.Bing | ||
exception = Exception("Message") | ||
result = get_error_message(exception) | ||
self.assertEqual("Bing: Exception: Message", result) | ||
def test_get_last_provider(self): | ||
ChatCompletion.create(g4f.models.default, DEFAULT_MESSAGES, ProviderMock) | ||
self.assertEqual(get_last_provider(), ProviderMock) | ||
|
||
def test_get_last_provider_retry(self): | ||
ChatCompletion.create(g4f.models.default, DEFAULT_MESSAGES, RetryProvider([ProviderMock])) | ||
self.assertEqual(get_last_provider(), ProviderMock) | ||
|
||
def test_get_last_provider_async(self): | ||
coroutine = ChatCompletion.create_async(g4f.models.default, DEFAULT_MESSAGES, ProviderMock) | ||
asyncio.run(coroutine) | ||
self.assertEqual(get_last_provider(), ProviderMock) | ||
|
||
if __name__ == '__main__': | ||
unittest.main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
from g4f.Provider.base_provider import AbstractProvider, AsyncProvider, AsyncGeneratorProvider | ||
|
||
class ProviderMock(AbstractProvider): | ||
working = True | ||
|
||
def create_completion( | ||
model, messages, stream, **kwargs | ||
): | ||
yield "Mock" | ||
|
||
class AsyncProviderMock(AsyncProvider): | ||
working = True | ||
|
||
async def create_async( | ||
model, messages, **kwargs | ||
): | ||
return "Mock" | ||
|
||
class AsyncGeneratorProviderMock(AsyncGeneratorProvider): | ||
working = True | ||
|
||
async def create_async_generator( | ||
model, messages, stream, **kwargs | ||
): | ||
yield "Mock" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.