diff --git a/tests/conftest.py b/tests/conftest.py
new file mode 100644
index 0000000..f4ed619
--- /dev/null
+++ b/tests/conftest.py
@@ -0,0 +1,135 @@
+"""Pytest configuration and fixtures."""
+import json
+
+import pytest
+
+from i18n_key_sync.locale import LocaleParser
+
+
+@pytest.fixture
+def sample_python_code():
+ """Sample Python code with i18n keys."""
+ return '''
+from gettext import gettext as _
+
+def greet(name):
+ return _("hello") + " " + name
+
+def farewell():
+ return _("goodbye")
+
+messages = {
+ "welcome": _("welcome_message"),
+ "login": t("login_button"),
+}
+
+
+# Inline usage
+print(_("save"))
+print(_("cancel"))
+'''
+
+
+@pytest.fixture
+def sample_js_code():
+ """Sample JavaScript code with i18n keys."""
+ return '''
+import { t } from './i18n';
+
+const message = _("hello_world");
+const greeting = t("greeting");
+
+function showWelcome() {
+ return i18n.t("welcome_message");
+}
+
+// Template usage
+const text = `Hello ${name}, ${_("welcome_message")}`;
+
+// JSX usage
+return
{_("submit")}
;
+'''
+
+
+@pytest.fixture
+def sample_locale_json():
+ """Sample JSON locale file."""
+ return {
+ "hello": "Hello",
+ "goodbye": "Goodbye",
+ "welcome_message": "Welcome!",
+ "save": "Save",
+ "cancel": "Cancel",
+ "unused_key": "This key is not used",
+ }
+
+
+@pytest.fixture
+def sample_locale_yaml():
+ """Sample YAML locale file."""
+ return {
+ "hello": "Hello",
+ "goodbye": "Goodbye",
+ "welcome_message": "Welcome!",
+ "save": "Save",
+ "cancel": "Cancel",
+ "unused_key": "This key is not used",
+ "nested": {
+ "key": "Nested value",
+ "deep": {
+ "key": "Deep nested value",
+ },
+ },
+ }
+
+
+@pytest.fixture
+def temp_locale_dir(tmp_path, sample_locale_json):
+ """Create a temporary locale directory with sample files."""
+ locale_dir = tmp_path / "locales"
+ locale_dir.mkdir()
+
+ en_file = locale_dir / "en.json"
+ en_file.write_text(json.dumps(sample_locale_json, indent=2))
+
+ es_file = locale_dir / "es.json"
+ es_data = sample_locale_json.copy()
+ es_data["hello"] = "Hola"
+ es_file.write_text(json.dumps(es_data, indent=2))
+
+ return locale_dir
+
+
+@pytest.fixture
+def temp_locale_dir_yaml(tmp_path, sample_locale_yaml):
+ """Create a temporary locale directory with YAML files."""
+ import yaml
+
+ locale_dir = tmp_path / "locales_yaml"
+ locale_dir.mkdir()
+
+ en_file = locale_dir / "en.yaml"
+ en_file.write_text(yaml.dump(sample_locale_yaml, default_flow_style=False))
+
+ return locale_dir
+
+
+@pytest.fixture
+def locale_parser():
+ """Create a LocaleParser instance."""
+ return LocaleParser()
+
+
+@pytest.fixture
+def temp_project_dir(tmp_path, sample_python_code, sample_js_code, temp_locale_dir):
+ """Create a temporary project directory with code and locales."""
+ src_dir = tmp_path / "src"
+ src_dir.mkdir()
+
+ python_file = src_dir / "main.py"
+ python_file.write_text(sample_python_code)
+
+ js_file = src_dir / "app.js"
+ js_file.write_text(sample_js_code)
+
+ return tmp_path