// DepoMongo CANLI entegrasyon testi — localhost Mongo AYAKTAYSA koşar, yoksa // sessizce atlanır (CI/Mongo'suz makine kırmızı olmaz). Test veritabanı ayrı // (fiko_istakip_test); beklentiler mevcut duruma GÖRELİ (temizlik gerektirmez, // tekrar koşumda deterministik). #if FIKO_ISTAKIP_MONGO #include #include #include "fiko/istakip/depo_mongo.hpp" #include "fiko/istakip/merkez.hpp" #include "fiko_test.hpp" using namespace fiko::istakip; FIKO_TEST(depo_mongo_canli_gidis_donus) { // FIKO_MONGO_URI ortam değişkeniyle kimlikli sunucuya yönlendirilebilir // (varsayılan: kimliksiz localhost; auth isteyen sunucuda atlanır). const char* ortam = std::getenv("FIKO_MONGO_URI"); DepoMongo depo(ortam && ortam[0] ? std::string(ortam) : "mongodb://localhost:27017/fiko_istakip_test?serverSelectionTimeoutMS=700"); if (!depo.acik()) { // Mongo yok → atla (kontrolsüz test "geçti" sayılır) std::printf(" (atlandı: %s)\n", depo.hata().c_str()); return; } const uint64_t s0 = depo.sonSurum(), k0 = depo.sonKimlik(); IsKayit k; k.kimlik = k0 + 1; k.tur = "test"; k.surum = s0 + 1; alanAta(k, "ad", "canlı ünite — türkçe içerik"); alanAta(k, "tutar", "12500"); FIKO_KONTROL(depo.kaydet(k)); IsKayit okunan; FIKO_KONTROL(depo.bul(k.kimlik, okunan)); FIKO_KONTROL(okunan.tur == "test" && !okunan.silindi); FIKO_KONTROL(alanBul(okunan, "ad") && std::string(alanBul(okunan, "ad")) == "canlı ünite — türkçe içerik"); FIKO_KONTROL(depo.sonSurum() == s0 + 1 && depo.sonKimlik() == k0 + 1); const auto delta = depo.surumdenBeri(s0); FIKO_KONTROL(delta.size() == 1 && delta[0].surum == s0 + 1); // Güncelleme (upsert) + tombstone. okunan.surum = s0 + 2; okunan.silindi = true; FIKO_KONTROL(depo.kaydet(okunan)); IsKayit tekrar; FIKO_KONTROL(depo.bul(k.kimlik, tekrar) && tekrar.silindi && tekrar.surum == s0 + 2); // İstemci sıra kalıcılığı (idempotens kral yeniden başlasa da korunur). const uint64_t no = 424242, sira0 = depo.istemciSira(no); FIKO_KONTROL(depo.istemciSiraKaydet(no, sira0 + 1)); FIKO_KONTROL(depo.istemciSira(no) == sira0 + 1); // Merkez + Mongo uçtan uca: sayaçlar depodan devam eder, idempotens çalışır. IsMerkez m(depo); IsKayit taslak; taslak.tur = "test"; alanAta(taslak, "ad", "merkez-mongo"); FIKO_KONTROL(!m.yaz(no, sira0 + 1, taslak).uygulandi); // işlenmiş sıra → tekrar reddi const auto s = m.yaz(no, sira0 + 2, taslak); FIKO_KONTROL(s.uygulandi && s.kayit.surum == s0 + 3 && s.kayit.kimlik == k0 + 2); } #endif // FIKO_ISTAKIP_MONGO